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').

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`.

Examples

Input

contest
son


Output

10


Input

contest
programming


Output

-1


Input

contest
sentence


Output

33
/*
Stay innocent, be naive. 
But still dream big. 
Dream big to the point that it is beyond your ability and endeavour to achieve it. 
So dream big and don’t lose your innocence.
*/
import java.util.*;
import java.io.*;

   public class Main
   {
      public static void main(String args[]) throws Exception
      {
         BufferedReader infile = new BufferedReader(new InputStreamReader(System.in));  
         StringTokenizer st = new StringTokenizer(infile.readLine());
         String input1 = st.nextToken();
         String input2 = infile.readLine();
         char[] arr = input1.toCharArray();
         char[] arr2 = input2.toCharArray();
         int N = arr.length;
         int M = arr2.length;
         //edge
         HashSet<Character> set = new HashSet<Character>();
         for(char c: arr)
            set.add(c);
         for(char c: arr2)
            if(!set.contains(c))
            {
               System.out.println(-1);
               return;
            }
         //define
         HashMap<Character, Integer> map = new HashMap<Character, Integer>();
         int boof = 0;
         for(char c: arr)
         {
            if(!map.containsKey(c))
               map.put(c, boof++);
         }
         //bst
         TreeSet<Integer>[] bts = new TreeSet[set.size()];
         for(int i=0; i < bts.length; i++)
            bts[i] = new TreeSet<Integer>();
         for(int i=0; i < N; i++)
         {
            int dex = map.get(arr[i]);
            bts[dex].add(i);
         }
         //query
         long res = 0L;
         for(int i=0; i < M; i++)
         {
            int check = map.get(arr2[i]);
            int dex = (int)(res%N);
            if(bts[check].last() < dex)
               res += (N-dex)+bts[check].first();
            else
            {
               int next = bts[check].ceiling(dex);
               if(next != dex || i > 0 && arr2[i] != arr2[i-1] || i == 0)
                  res += next-dex;
               else
               {
                  //neighbors
                  int temp = dex+1;
                  if(bts[check].last() < temp)
                     res += (N-temp)+bts[check].first();
                  else
                     res += bts[check].ceiling(temp)-temp;
                  res++;
               }
            }
         }
         System.out.println(res+1);
      }
   }