#include<bits/stdc++.h>
using namespace std;
#define int long long int
#define m_p make_pair
#define pb push_back 
#define ppb pop_back
#define f first
#define s second
#define pii pair<int,int>
#define ios ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define double long double
const double pi=3.14159265358979;
const   int  mod=1e9+7;
//freopen("filename","r", stdin);
int takemod(int a,int mod){return ((a%mod)+mod)%mod;}
//int  bs(int  a[], int  l, int  r, int  x){if(r>=l){ int  mid=(l+r)/2;if(a[mid]==x)return mid;else if(a[mid]>x)return bs(a,l,mid-1,x); else return bs(a,mid+1,r,x);}return -1;}
int  power(int  b, int  p){if(p==0)return 1;else if(p%2==0){int q=power(b,p/2);return ((q)*(q));}else return ((b)*(power(b,p-1)));}
int  powerm(int  b, int  p){if(p==0)return 1;else if(p%2==0){int q=powerm(b,p/2);return ((q%mod)*(q%mod))%mod;}else return ((b%mod)*(powerm(b,p-1)%mod))%mod;}
bool isprime( int  n){if(n==1)return false;if(n==2 or n==3)return true; int  lim=sqrt(n); int  i=2;while(i<=lim){if(n%i==0)return false; i++;}return true;}
vector< int > factors( int  n){vector< int > a;a.pb(1); int  lim=sqrt(n),i=2;while(i<=lim){if(n%i==0){a.pb(i);if(i!=n/i)a.pb(n/i);}i++;}if(n!=1)a.pb(n);sort(a.begin(),a.end());return a;}
vector<pii> pf_with_count(int  b){ pii p;vector<pii>pf;int  count=0;while(b%2==0){b/=2;count++;}if(count>0){p.f=2;p.s=count;pf.pb(p);}int i=3;while(i<=sqrt(b)){count=0;while(b%i==0){b/=i;count++;}if(count>0){p.f=i;p.s=count;pf.pb(p);}i+=2;}if(b>2) {p.f=b;p.s=1;pf.pb(p);}return pf;}
int  bs_t_i(string s){int  l=strtoull(s.c_str(),NULL,2);return l;}
string  i_to_bs(int  n){string s = bitset< 4 >( n ).to_string();return s;}

signed main()
{
  ios;
  // int n,k;
  // cin>>n>>k;
  // set<int> help;
  // int i=0;
  // vector<pair<pii,int>> v;
  // while(i<n)
  // {
  //   int l,r;
  //   cin>>l>>r;
  //   help.insert(l);
  //   v.pb({{l,r},i+1});
  //   i++;
  // }
  // set<int> ans;
  // sort(v.begin(),v.end());
  // priority_queue<pii> q;
  // i=0;
  // while(i<n-1 and v[i].f.f==v[i+1].f.f)
  // {
  //   q.push({v[i].f.s,v[i].s});
  //   i++;
  // }
  // if(i<n)
  //   {
  //     q.push({v[i].f.s,v[i].s});
  //     i++;
  //   }
  // while(q.size()>k)
  // {
  //   ans.insert(q.top().s);
  //   q.pop();
  // }
  // while(i<n)
  // {
  //   priority_queue<pii> pq;
  //   while(i<n-1 and v[i].f.f==v[i+1].f.f)
  //   {
  //     pq.push({v[i].f.s,v[i].s});
  //     i++;
  //   }
  //   if(i<n)pq.push({v[i].f.s,v[i].s});
  //  while(i<n and q.size()>0 and q.top().f>=v[i].f.f)
  //   {
  //     pq.push(q.top());
  //     q.pop();
  //   }
  //   while(pq.size()>k)
  //   {
  //     ans.insert(pq.top().s);
  //     pq.pop();
  //   }
  //   i++;
  //  while(i<n and pq.size()>0 and pq.top().f>=v[i].f.f)
  //   {
  //     q.push(pq.top());
  //     pq.pop();
  //   }
  
  // }
  // cout<<ans.size()<<endl;
  // for(auto x:ans)cout<<x<<" ";

string s,t;
cin>>s>>t;
vector<int> v[26];
int i=0;
int n=s.size();
while(i<n)
{
  v[s[i]-'a'].pb(i+1);
  i++;
}
i=0;
int ans=0;
int ino=0;
while(i<t.size())
{
  if(v[t[i]-'a'].size()==0)
  {
    cout<<-1;
    return 0;
  }
  int k=upper_bound(v[t[i]-'a'].begin(),v[t[i]-'a'].end(),ino)-v[t[i]-'a'].begin();
  if(k<v[t[i]-'a'].size())
  {
    ans+=v[t[i]-'a'][k]-ino;
    ino=v[t[i]-'a'][k];
  }
  else
  {
    ans+=n-ino;
    ino=v[t[i]-'a'][0];
    ans+=ino;

  }
  i++;
}
cout<<ans;


}









Measured memory_bytes: 1736