#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;

#define ll long long
#define all(x) x.begin(),x.end()

typedef tree<
    int,
    null_type,
    greater<int>,
    rb_tree_tag,
    tree_order_statistics_node_update
> ordered_set;

ll MOD = 1000000007;

ll oo = 1e15;

ll const N = 1e4;
ll matching[N + 1][20];
ll stringsL[20];
ll maskSize[1ll << 20];
ll n, ans = oo;

ll len(ll x) {
    ll ret = 0;
    while (x) {
        ret += (x & 1);
        x /= 2;
    }
    return ret;
}

string s;

ll go(ll mask) {
    //base case
    if (mask == 0) return 0ll;
    //transition
    ll ch1 = -oo;
    ll size = 0;
    if (~maskSize[mask]) {
        size = maskSize[mask];
    } else {
        for (ll i = 0; i < n; i++) {
            if ((mask & (1ll << i))) {
                size += stringsL[i];
            }
        }
        maskSize[mask] = size;
    }
    for (ll i = 0; i < n; i++) {
        if (mask & (1ll << i)) {
            ll idx = go(mask ^ (1ll << i));
            ll ch = matching[idx][i] + idx;
            ll size2 = size;
            if (ch >= s.length()) {
                ans = min(ans, size2);
            }
            ch1 = max(ch1, ch);
        }
    }
    return ch1;
}

void solve(ll test_case) {
    cin >> s;
    cin >> n;
    memset(maskSize, -1, sizeof maskSize);
    //preprocessing
    string ts[n];
    for (ll i = 0; i < n; i++) {
        cin >> ts[i];
        stringsL[i] = ts[i].length();
    }
    for (ll i = 0; i < n; i++) {
        for (ll j = 0; j < s.length(); j++) {
            ll s_ptr = j;
            ll size = 0;
            for (ll k = 0; s_ptr < s.length() && k < ts[i].length(); k++) {
                if (s[s_ptr] == ts[i][k]) {
                    size++;
                    s_ptr++;
                }
            }
            matching[j][i] = size;
        }
    }
    //dp part
    //definition:
    //go(mask) -> maximum matching using elements mask
    go((1ll << n) - 1);
    cout << ans << endl;
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r",stdin);
    freopen("output.txt", "w",stdout);
#endif
    bool calc = false;
    // calc = true;
    if (calc) {
        cout << 2 * 2 * 4 << endl;
        // cout << (1ll << (20)) << endl;
        return 0;
    }
    ll t = 1;
    // cin >> t;
    for (ll i = 1; i <= t; i++) {
        solve(i);
    }
}
