using
System;
public
class
GFG {
const
int
MAX_STR_SIZE = (
int
)2e5 + 99;
const
int
INF = (
int
)1e9 + 99;
static
string
S, T;
static
int
[, ] nextOccurrence
=
new
int
[MAX_STR_SIZE, 26];
static
int
CalculateOperations()
{
int
result = 1, position = 0;
for
(
int
i = 0; i < T.Length; ++i) {
if
(position == S.Length) {
position = 0;
++result;
}
if
(nextOccurrence[position, T[i] -
'a'
]
== INF) {
position = 0;
++result;
}
if
(nextOccurrence[position, T[i] -
'a'
] == INF
&& position == 0) {
result = INF;
break
;
}
position
= nextOccurrence[position, T[i] -
'a'
] + 1;
}
return
result;
}
static
void
Main()
{
S =
"aabce"
;
T =
"ace"
;
for
(
int
i = 0; i < S.Length + 5; ++i)
for
(
int
j = 0; j < 26; ++j)
nextOccurrence[i, j] = INF;
for
(
int
i = S.Length - 1; i >= 0; --i) {
for
(
int
j = 0; j < 26; ++j)
nextOccurrence[i, j]
= nextOccurrence[i + 1, j];
nextOccurrence[i, S[i] -
'a'
] = i;
}
int
result = CalculateOperations();
if
(result >= INF)
Console.WriteLine(-1);
else
Console.WriteLine(result);
}
}