Problem:
Score : 500 points

Problem Statement

Given are two strings s and t consisting of lowercase English letters. Determine if there exists an integer i satisfying the following condition, and find the minimum such i if it exists.

Let s' be the concatenation of 10^{100} copies of s. t is a subsequence of the string {s'}_1{s'}_2\ldots{s'}_i (the first i characters in s').

Notes

A subsequence of a string a is a string obtained by deleting zero or more characters from a and concatenating the remaining characters without changing the relative order. For example, the subsequences of contest include net, c, and contest.

Constraints

1 \leq |s| \leq 10^5

1 \leq |t| \leq 10^5

s and t consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:

s
t

Output

If there exists an integer i satisfying the following condition, print the minimum such i; otherwise, print -1.

Sample Input 1

contest
son

Sample Output 1

10

t = son is a subsequence of the string contestcon (the first 10 characters in s' = contestcontestcontest...), so i = 10 satisfies the condition.

On the other hand, t is not a subsequence of the string contestco (the first 9 characters in s'), so i = 9 does not satisfy the condition.

Similarly, any integer less than 9 does not satisfy the condition, either. Thus, the minimum integer i satisfying the condition is 10.

Sample Input 2

contest
programming

Sample Output 2

-1

t = programming is not a substring of s' = contestcontestcontest.... Thus, there is no integer i satisfying the condition.

Sample Input 3

contest
sentence

Sample Output 3

33

Note that the answer may not fit into a 32-bit integer type, though we cannot put such a case here.

Solution in Python (3.8.2) (judge verdict: Accepted)

#このプログラムはpypyじゃ通らない
import collections,math
s = input()
t = input()
#tを構成文字で、sにない文字があったらダメ。
#構成できるなら最大でもlen(t)個しかないから、10^100の連結は必要ない

#最も不足する文字を探す
ls = collections.Counter(s)
lt = collections.Counter(t)

time_dict ={}
tmp=0
max_time=0#一番少ないやつ
for t_key,t_val in lt.items():
    if t_key not in ls:#sの中にtの文字がない
        print(-1)
        exit()

#文字をカウントしていく
cnt = 0
tt = list(t[::-1])#指定したい文字へのアクセス時間を1にしたいので反転
idx=0
ss = s#ssは検索文字列
while tt!=[]:#ttが空っぽになったらおしまい
    next_t = tt.pop()#つぎに構成したい文字= next_t
    idx=ss.find(next_t)#検索文字列にnext_tがあるか
    if idx == -1:#ない
        cnt += len(ss)#検索文字列の長さを全部足す
        idx = s.find(next_t)#新たにsを検索文字列として探す
        ss = s[idx+1:]#next_t以降の文字列を次回の検索文字列をセット
        cnt += idx+1 #nex_tが見つかった文字までの長さ
    else:#ある
        cnt += idx+1 #文字長さを足す 
        ss = ss[idx+1:]#次回の検索文字列をセット
print(cnt)