/**
* @author khokharnikunj8
**/

#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx")
#pragma GCC target("avx,tune=native")

#include <bits/stdc++.h>


using namespace std;
#define ll long long
#define endl "\n"
#define si(x) scanf("%d",&x);
#define pi(x) printf("%d",x);
#define sl(x) scanf("%lld",&x);
#define pl(x) printf("%lld",x);
#define len(x) (sizeof(x)/sizeof(x[0]))
#define init(ar, x) for(int iii=0;iii<x;iii++)ar[iii]=0;
#define pb push_back


class CodeHash {
public:
    string precise(double number, int prec) {
        stringstream ss;
        ss << fixed << setprecision(prec) << number;
        return ss.str();
    }
};


class ScanReader {

private:
    FILE *stream;
    char buffer[1 << 11];
    bool is_digit[1 << 8];
    int index, total;


    int scan() {
        if (index >= total) {
            index = 0;
            total = fread(buffer, 1, 1 << 11, stream);
            if (total <= 0)return -1;
        }
        return buffer[index++];
    }

    bool iswhitespace(int n) {
        if (n == ' ' || n == '\n' || n == '\t' || n == '\r' || n == -1)return true;
        return false;
    }

public:
    ScanReader(FILE *stream) {
        this->stream = stream;
        index = total = 0;
        for (int i = 0; i < 1 << 8; i++)is_digit[i] = isdigit(i);
    }

    int scanInt() {
        int integer = 0, temp = scan();
        while (iswhitespace(temp))temp = scan();
        int neg = 1;
        if (temp == '-')neg *= -1, temp = scan();
        while (!iswhitespace(temp))if (is_digit[temp])integer *= 10, integer += (temp - '0'), temp = scan();
        return neg * integer;
    }

    long long scanLong() {
        long long integer = 0;
        int temp = scan();
        while (iswhitespace(temp))temp = scan();
        int neg = 1;
        if (temp == '-')neg *= -1, temp = scan();
        while (!iswhitespace(temp))if (is_digit[temp])integer *= 10, integer += (temp - '0'), temp = scan();
        return neg * integer;
    }

    string scanString() {
        string ss = "";
        int temp = scan();
        while (iswhitespace(temp))temp = scan();
        while (!iswhitespace(temp))ss += temp, temp = scan();
        return ss;
    }

    double scanDouble() {
        int c = scan();
        while (iswhitespace(c)) c = scan();
        int sgn = 1;
        if (c == '-')sgn = -1, c = scan();
        double res = 0;
        while (!iswhitespace(c) && c != '.') {
            if (c == 'e' || c == 'E')return res * pow(10, scanInt());
            res *= 10;
            res += c - '0';
            c = scan();
        }
        if (c == '.') {
            c = scan();
            double m = 1;
            while (!iswhitespace(c)) {
                if (c == 'e' || c == 'E') {
                    return res * pow(10, scanInt());
                }
                m /= 10;
                res += (c - '0') * m;
                c = scan();
            }
        }
        return res * sgn;
    }
};

class PrintWriter {
private:
    FILE *stream;
    static const int BUFFER_SIZE = (1 << 11) - 1;
    static const int MAX_OUT_SIZE = 23;
    int size;
    char buffer[BUFFER_SIZE];

    void write(long long v) {
        if (v < 0)buffer[size++] = '-', v *= -1;
        if (v < 10)
            buffer[size++] = v + 48;
        else {
            write(v / 10);
            buffer[size++] = v % 10 + 48;
        }
    }

public:
    PrintWriter(FILE *stream) {
        this->size = 0;
        this->stream = stream;
    }

    void close() {
        if (size)
            fwrite(buffer, 1, size, stream);
    }

    void println(long long s) {
        if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
            fwrite(buffer, 1, size, stream);
            size = 0;
        }
        write(s);
        buffer[size++] = '\n';
    }

    void print(long long s) {
        if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
            fwrite(buffer, 1, size, stream);
            size = 0;
        }
        write(s);
        buffer[size++] = ' ';
    }

    void println(string s) {
        if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
            fwrite(buffer, 1, size, stream);
            size = 0;
        }
        for (int i = 0; i < s.length(); i++) {
            buffer[size++] = s[i];
            if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
                fwrite(buffer, 1, size, stream);
                size = 0;
            }
        }
        buffer[size++] = '\n';
    }

    void print(string s) {
        if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
            fwrite(buffer, 1, size, stream);
            size = 0;
        }
        for (int i = 0; i < s.length(); i++) {
            buffer[size++] = s[i];
            if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
                fwrite(buffer, 1, size, stream);
                size = 0;
            }
        }
        //buffer[size++] = ' ';
    }
};


FILE *fi = fopen("C:\\Users\\Nikunj\\CLionProjects\\compe\\testcases\\in.txt", "r+");
FILE *fo = fopen("C:\\Users\\Nikunj\\CLionProjects\\compe\\testcases\\out.txt", "w+");
//FILE *fi = fopen("/home/khokharnikunj8/Desktop/out.txt", "r+");
//FILE *fo = fopen("/home/khokharnikunj8/Desktop/out1.txt", "w+");


int main() {
//#ifdef ONLINE_JUDGE
    fi = stdin;
    fo = stdout;
//#endif
    ScanReader *in = new ScanReader(fi);
    PrintWriter *out = new PrintWriter(fo);
    CodeHash *ch = new CodeHash();
    string s = in->scanString();
    string t = in->scanString();
    int last[s.length()][26];
    for (int i = s.length() - 1; i >= 0; i--) {
        if (i == s.length() - 1) {
            for (int j = 0; j < 26; j++)last[i][j] = s.length();
        } else for (int j = 0; j < 26; j++) last[i][j] = last[i + 1][j];
        last[i][s[i] - 'a'] = i;
    }
    ll length = 0;
    int cur = 0;
    int index = 0;
    while (index < t.length()) {
        if (last[cur][t[index] - 'a'] == s.length()) {
            if (cur == 0) {
                out->println(-1);
                out->close();
                return 0;
            }
            length += last[cur][t[index] - 'a'] - cur;
            cur = (last[cur][t[index] - 'a']) % s.length();
        } else {
            length += last[cur][t[index] - 'a'] - cur + 1;
            cur = (last[cur][t[index] - 'a'] + 1) % s.length();
            index++;
        }
    }
    out->println(length);
    out->close();
    return 0;
}



Measured memory_bytes: 10752