#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e2 + 5;
const int M = 1e2 + 5;
template<typename T>
bool minimize(T& a, const T& b) {
if (a < b) return false;
a = b;
return true;
}
int n, m;
string T;
vector<string> S[N];
int dp[N][M]; // dp[i][j] = số tiền ít nhất cần dùng khi xét i bags đầu tiên, và trùng được đến vị trí thứ j của xâu T
bool matched(const string& T, int j, const string& S) {
if (j + S.size() > m) return false;
for (int i = 0; i < S.size(); i++) {
if (T[j + 1 + i] != S[i]) return false;
}
return true;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> T;
m = T.size();
T = ' ' + T;
cin >> n;
for (int i = 1; i <= n; i++) {
int a; cin >> a;
S[i].resize(a);
for (int j = 0; j < a; j++) {
cin >> S[i][j];
}
}
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= m; j++) dp[i][j] = INF;
}
dp[0][0] = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= m; j++) {
if (dp[i][j] == INF) continue;
// không quan tâm túi thứ i
minimize(dp[i + 1][j], dp[i][j]);
// chọn một xâu từ túi thứ i
for (auto& s : S[i + 1]) {
if (!matched(T, j, s)) continue;
minimize(dp[i + 1][j + s.size()], dp[i][j] + 1);
}
}
}
int ans = dp[n][m];
if (ans == INF) ans = -1;
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDFlMiArIDU7ICAKY29uc3QgaW50IE0gPSAxZTIgKyA1OyAgCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpib29sIG1pbmltaXplKFQmIGEsIGNvbnN0IFQmIGIpIHsKCWlmIChhIDwgYikgcmV0dXJuIGZhbHNlOwoJYSA9IGI7IAoJcmV0dXJuIHRydWU7IAp9CgppbnQgbiwgbTsgCnN0cmluZyBUOyAgCnZlY3RvcjxzdHJpbmc+IFNbTl07IAppbnQgZHBbTl1bTV07IC8vIGRwW2ldW2pdID0gc+G7kSB0aeG7gW4gw610IG5o4bqldCBj4bqnbiBkw7luZyBraGkgeMOpdCBpIGJhZ3MgxJHhuqd1IHRpw6puLCB2w6AgdHLDuW5nIMSRxrDhu6NjIMSR4bq/biB24buLIHRyw60gdGjhu6kgaiBj4bunYSB4w6J1IFQKCmJvb2wgbWF0Y2hlZChjb25zdCBzdHJpbmcmIFQsIGludCBqLCBjb25zdCBzdHJpbmcmIFMpIHsKCWlmIChqICsgUy5zaXplKCkgPiBtKSByZXR1cm4gZmFsc2U7ICAKCWZvciAoaW50IGkgPSAwOyBpIDwgUy5zaXplKCk7IGkrKykgewoJCWlmIChUW2ogKyAxICsgaV0gIT0gU1tpXSkgcmV0dXJuIGZhbHNlOwoJfQoJcmV0dXJuIHRydWU7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IFQ7IAoJbSA9IFQuc2l6ZSgpOyAKCVQgPSAnICcgKyBUOyAgCgkKCWNpbiA+PiBuOyAgIAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJaW50IGE7IGNpbiA+PiBhOyAgIAoJCVNbaV0ucmVzaXplKGEpOyAKCQlmb3IgKGludCBqID0gMDsgaiA8IGE7IGorKykgewoJCQljaW4gPj4gU1tpXVtqXTsgIAoJCX0KCX0KCQoJZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IDA7IGogPD0gbTsgaisrKSBkcFtpXVtqXSA9IElORjsgIAoJfQkKCglkcFswXVswXSA9IDA7ICAKCglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCWZvciAoaW50IGogPSAwOyBqIDw9IG07IGorKykgewoJCQlpZiAoZHBbaV1bal0gPT0gSU5GKSBjb250aW51ZTsgCgoJCQkvLyBraMO0bmcgcXVhbiB0w6JtIHTDumkgdGjhu6kgaSAKCQkJbWluaW1pemUoZHBbaSArIDFdW2pdLCBkcFtpXVtqXSk7ICAKCgkJCS8vIGNo4buNbiBt4buZdCB4w6J1IHThu6sgdMO6aSB0aOG7qSBpIAoJCQlmb3IgKGF1dG8mIHMgOiBTW2kgKyAxXSkgewoJCQkJaWYgKCFtYXRjaGVkKFQsIGosIHMpKSBjb250aW51ZTsgCgkJCQltaW5pbWl6ZShkcFtpICsgMV1baiArIHMuc2l6ZSgpXSwgZHBbaV1bal0gKyAxKTsgCgkJCX0KCQl9Cgl9CgoJaW50IGFucyA9IGRwW25dW21dOyAKCWlmIChhbnMgPT0gSU5GKSBhbnMgPSAtMTsgIAoKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9Cg==