#include <fstream>
#include <cstring>
#include <queue>



using namespace std;

int N,AIB[50100],Sol;
char S[50100],S2[50100];
queue <int> Index[26];

int Query(int nod) {

 int Rez=0;

 while(nod>0) {
  Rez+=AIB[nod];
  nod-=(nod&-nod);
  }

 return Rez;

}
void Update(int nod) {

 while(nod<=N) {
  AIB[nod]++;
  nod+=(nod&-nod);
  }

}
void Afis() {

 ofstream out("swap.out");
 out<<Sol<<'\n';
 out.close();

}
void Solve() {

 int i,Val;

 for(i=1;i<=N;i++) {

  if(Index[(S2[i]-97)].empty())
   {Sol=-1;return;}

  Val=Index[(S2[i]-97)].front();
  Sol+=i-1-Query(Val-1);
  Update(Val);
  Index[(S2[i]-97)].pop();

  }

}
void Init() {

 for(int i=1;i<=N;i++)
  Index[(S[i]-97)].push(i);

}
void Citire() {

 ifstream in("swap.in");
 in.getline(S+1,50100);
 in.getline(S2+1,50100);
 N=strlen(S+1);
 in.close();

}
int main() {

 Citire();
 Init();
 Solve();
 Afis();

 return 0;

}