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 C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 100000
int A[26][N]={0}, pos[26]={0};

int  main(){
  int l, i, tmp, ex, cur, j;
  long long int loop=0;
  char s[N], t[N];
  scanf("%s", s);
  scanf("%s", t);
  l=strlen(s);
  for (i=0; i<l; i++){
    tmp=s[i]-'a';
    A[tmp][pos[tmp]]=i; pos[tmp]++;
  }

/*
  for (i=0; i<26; i++){
    printf("%d ", pos[i]);
  }
*/

  cur=-1;
  for (i=0; i<strlen(t); i++){
//    printf("%lld %d\n", loop, cur);
    tmp=t[i]-'a';
//    printf("%c\n", tmp+'a');
    ex=0;
    if (pos[tmp]==0) {
      printf("-1\n"); return 0;
    }
    for (j=0; j<pos[tmp]; j++){
      if (A[tmp][j]>cur) {
        ex=1; cur=A[tmp][j]; break;
      }
    }
    if (ex) continue;
    cur=A[tmp][0]; loop++;
  }
  printf("%lld\n", loop*strlen(s)+cur+1);
  return 0;
}