#include <bits/stdc++.h>
using namespace std;

FILE *IN, *OUT;
int N, Ans, Total, Start, End;
int c1[26], c2[26];
int first[50005], apear[27], second[26][50005], Val;

int pos, out, sign;
char f[131072], Out[131072], str[10], c;

struct _Tree{
    int Lower, Pos;
}T[132000];

inline void R_Ch(char &ch){
 ch = f[pos++];
  if(pos == 131072)
            fread(f, 131072, 1, IN), pos = 0;
}

inline void Write_Ch(char ch){
    Out[out++] = ch;
    if(out == 131072)
        fwrite(Out, 131072, 1, OUT), out = 0;
}

inline void Write_Int(int nr){
    int x = 0;
    if(nr < 0) Write_Ch('-'), nr =- nr;
    do{
        str[x++] = nr % 10 + '0';
        nr /= 10;
    }
    while(nr);
    while(x > 0)
        Write_Ch(str[--x]);
}

inline int max2(int a,int b){
    if (a > b) return a;
    else return b;
}

inline void Read(int &nr){
    sign = 0;
    nr = 0;
    while(f[pos] < '0' || f[pos] > '9'){
        if(f[pos] == '-') sign=1;
        pos++;
        if(pos == 131072)
            fread(f, 131072, 1, IN), pos = 0;
    }
    while(f[pos] >= '0' && f[pos] <= '9'){
        nr = 10 * nr + f[pos++] - '0';
        if(pos == 131072)
            fread(f, 131072, 1, IN), pos = 0;
    }
    if(sign) nr =- nr;
}

void Update(int node,int start,int end,int V){
 if(start == end)
  T[node].Pos = V;
 else{
  int mid = (start + end) >> 1;
  if(V <= mid) Update(2 * node, start, mid, V);
  else Update(2 * node + 1, mid + 1, end, V);
 }
}

void Query(int node,int start,int end){
 if(start == end){
  Ans += T[node].Pos + T[node].Lower;
  return;
 } else {
  Ans += T[node].Lower;
  int mid = (start+end)>>1;
  if(Val <= mid) Query(2 * node, start, mid);
  else{
   T[2 * node].Lower++;
   Query(2 * node + 1, mid + 1, end);
  }
 }
}
int main(){
    IN = fopen("swap.in", "r");
    OUT = fopen("swap.out", "w");

    fread(f, 1, 131072, IN);
 R_Ch(c);
 while(c != '\n'){
  c1[c - 'a']++;
  first[++N] = c - 'a';
  R_Ch(c);
 }
 for(int i = 1; i <= N; i++){
  R_Ch(c);
  c2[c - 'a']++;
  second[c - 'a'][++apear[c - 'a']] = i;
  Update(1, 1, N, i);
 }
 bool possible = true;
 for(int i = 0; i <= 25 && possible; i++)
  if(c1[i] != c2[i]) possible = false;
 if(!possible){
  Write_Ch('-');
  Write_Ch('1');
 } else {
  memset(apear, 0, sizeof apear);
  for(int i =1 ; i <= N; i++){
   Ans = 0;
   Val = second[first[i]][++apear[first[i]]];
   Query(1, 1, N);
   Total += Ans - i;
  }
  Write_Int(Total);
 }
 if(out > 0) fwrite(Out, 1, out, OUT);
    return 0;
}