import
java.io.*;
import
java.util.*;
class
GFG {
static
void
find(String str1, String str2)
{
List<List<Integer> > vec1
=
new
ArrayList<List<Integer> >();
for
(
int
i =
0
; i <
26
; i++) {
vec1.add(
new
ArrayList<Integer>());
}
for
(
int
i =
0
; i < str1.length(); i++)
vec1.get(str1.charAt(i) -
'a'
).add(i);
int
result =
1
, position =
0
;
for
(
int
i =
0
; i < str2.length(); i++)
{
char
c = str2.charAt(i);
if
(vec1.get(c -
'a'
).size() ==
0
)
{
result = -
1
;
break
;
}
List<Integer> vec2 = vec1.get(c -
'a'
);
int
p = lower_bound(vec2, position);
if
(p == vec2.size())
{
result++;
i--;
position =
0
;
continue
;
}
else
{
position = vec2.get(p) +
1
;
}
}
System.out.println(result);
}
static
int
lower_bound(List<Integer> vec2,
int
position)
{
int
low =
0
, high = vec2.size() -
1
;
while
(low < high) {
int
mid = (low + high) /
2
;
if
(vec2.get(mid) < position)
low = mid +
1
;
else
high = mid;
}
return
(vec2.get(low) < position) ? low +
1
: low;
}
public
static
void
main(String[] args)
{
String str1 =
"abb"
, str2 =
"ababbbbb"
;
find(str1, str2);
}
}