from bisect import bisect



S = eval(input())

T = eval(input())

N = len(S)

# Sにおいてある文字が出てくる位置を調べる

idxs_S = [[] for _ in range(26)] # a~zの分

for i, c in enumerate(S):

    idx = ord(c) - ord("a")

    idxs_S[idx].append(i)



# Tに出てくる文字がSになければ無理

for c in set(T):

    if len(idxs_S[ord(c) - ord("a")]) == 0:

        print((-1))

        exit()



cnt_all_S = 0

idx_c = -1

for c in T:

    tmp = ord(c) - ord("a")

    idx = bisect(idxs_S[tmp], idx_c)

    if idx == len(idxs_S[tmp]): # 現行のSにこれ以上使えるcがない場合、新たにSを連結してその中からcを取り出す

        idx_c = idxs_S[tmp][0] # Sの中の初めのcの位置まで

        cnt_all_S += 1

    else:

        idx_c = idxs_S[tmp][idx]



print((N*cnt_all_S + idx_c + 1))
from collections import defaultdict

import bisect

s = eval(input())

t = eval(input())



N = len(s)



set_s = set(s)

set_t = set(t)



for c in set_t:

    if c not in set_s:

        print((-1))

        exit()



# それぞれの文字のインデックスを記録

idxs = defaultdict(list)

for i in range(N):

    idxs[s[i]].append(i)





current_idx = -1 # ここ0にしているとsの1文字目にtの1文字めと同じのがある時にずれるので注意

total = 0

for c in t:

    next_idx = bisect.bisect(idxs[c], current_idx) # bisect(bisect_right)だと同じやつがある場合その右のidxになる



    if next_idx == len(idxs[c]):

        total += N

        current_idx = idxs[c][0]

    else:

        current_idx = idxs[c][next_idx]





print((total + current_idx + 1))

#print(total , current_idx , 1)
from bisect import bisect

S = eval(input())
T = eval(input())
N = len(S)
# Sにおいてある文字が出てくる位置を調べる
idxs_S = [[] for _ in range(26)]  # a~zの分
for i, c in enumerate(S):
    idx = ord(c) - ord("a")
    idxs_S[idx].append(i)
# Tに出てくる文字がSになければ無理
for c in set(T):
    if len(idxs_S[ord(c) - ord("a")]) == 0:
        print((-1))
        exit()
cnt_all_S = 0
idx_c = -1
for c in T:
    tmp = ord(c) - ord("a")
    idx = bisect(idxs_S[tmp], idx_c)
    if idx == len(idxs_S[tmp]):  # 現行のSにこれ以上使えるcがない場合、新たにSを連結してその中からcを取り出す
        idx_c = idxs_S[tmp][0]  # Sの中の初めのcの位置まで
        cnt_all_S += 1
    else:
        idx_c = idxs_S[tmp][idx]
print((N * cnt_all_S + idx_c + 1))

from collections import defaultdict
import bisect

s = eval(input())
t = eval(input())
N = len(s)
set_s = set(s)
set_t = set(t)
for c in set_t:
    if c not in set_s:
        print((-1))
        exit()
# それぞれの文字のインデックスを記録
idxs = defaultdict(list)
for i in range(N):
    idxs[s[i]].append(i)
current_idx = -1  # ここ0にしているとsの1文字目にtの1文字めと同じのがある時にずれるので注意
total = 0
for c in t:
    next_idx = bisect.bisect(
        idxs[c], current_idx
    )  # bisect(bisect_right)だと同じやつがある場合その右のidxになる
    if next_idx == len(idxs[c]):
        total += N
        current_idx = idxs[c][0]
    else:
        current_idx = idxs[c][next_idx]
print((total + current_idx + 1))
# print(total , current_idx , 1)

-from bisect import bisect +from collections import defaultdict +import bisect -S = eval(input()) -T = eval(input()) -N = len(S) -# Sにおいてある文字が出てくる位置を調べる -idxs_S = [[] for _ in range(26)]  # a~zの分 -for i, c in enumerate(S): -    idx = ord(c) - ord("a") -    idxs_S[idx].append(i) -# Tに出てくる文字がSになければ無理 -for c in set(T): -    if len(idxs_S[ord(c) - ord("a")]) == 0: +s = eval(input()) +t = eval(input()) +N = len(s) +set_s = set(s) +set_t = set(t) +for c in set_t: +    if c not in set_s: -cnt_all_S = 0 -idx_c = -1 -for c in T: -    tmp = ord(c) - ord("a") -    idx = bisect(idxs_S[tmp], idx_c) -    if idx == len(idxs_S[tmp]):  # 現行のSにこれ以上使えるcがない場合、新たにSを連結してその中からcを取り出す -        idx_c = idxs_S[tmp][0]  # Sの中の初めのcの位置まで -        cnt_all_S += 1 +# それぞれの文字のインデックスを記録 +idxs = defaultdict(list) +for i in range(N): +    idxs[s[i]].append(i) +current_idx = -1  # ここ0にしているとsの1文字目にtの1文字めと同じのがある時にずれるので注意 +total = 0 +for c in t: +    next_idx = bisect.bisect( +        idxs[c], current_idx +    )  # bisect(bisect_right)だと同じやつがある場合その右のidxになる +    if next_idx == len(idxs[c]): +        total += N +        current_idx = idxs[c][0] -        idx_c = idxs_S[tmp][idx] -print((N * cnt_all_S + idx_c + 1)) +        current_idx = idxs[c][next_idx] +print((total + current_idx + 1)) +# print(total , current_idx , 1)