//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
typedef long long ll;
const int N=5e5+5;
char s[N],t[N];int nxt[N][26],las[26],n,m,res;
int main(){
	scanf("%s%s",s+1,t+1),n=strlen(s+1),m=strlen(t+1);
	fd(i,n,1){
		fp(j,0,25)nxt[i][j]=las[j];
		las[s[i]-'a']=i;
	}
	fd(i,n,1){
		fp(j,0,25)nxt[i][j]=las[j];
		las[s[i]-'a']=i;
	}
	fp(j,0,25)nxt[0][j]=las[j];
	R int pos=0;
	fp(i,1,m){
		if(!nxt[pos][t[i]-'a'])return puts("-1"),0;
		res+=(nxt[pos][t[i]-'a']<=pos),pos=nxt[pos][t[i]-'a'];
	}
	printf("%lld\n",1ll*res*n+pos);
	return 0;
}