#include using namespace std; const int md = 1e9 + 7; struct matrix{ int a[105][105], n; matrix(){ n = 0; for (int i = 0; i < 105; ++i){ for (int j = 0; j < 105; ++j){ a[i][j] = 0; } } } void print(){ cout <<"SIZE "< > g; matrix bin_pow(matrix a, int b){ matrix s = matrix(); s.n = a.n; for (int i = 1; i <= s.n; ++i)s.a[i][i] = 1; while (b > 0){ if (b % 2 == 0){ a = a * a; b >>= 1; }else { s = s * a; b--; } } return s; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin >>n>>m; for (int i = 1; i <= m; ++i){ int k; cin >>k; cin >>a[i]; for (int j = 1; j <= k; ++j){ b[i][j] = a[i].substr(0, j); } } a[0] = " "; int k = 1; g.push_back(make_pair(0, 0)); num[0][0] = 1; matrix aaa = matrix(); for (int i = 0; i < k; ++i){ string cur = a[g[i].first].substr(0, g[i].second); for (char q = 'a'; q <= 'z'; ++q){ string s = cur + q; bool o = 1; for (int j = 1; j <= m; ++j){ if (s == a[j]){ o = 0; break; } } if (!o)continue; int len = -1, pos = -1; int mx = s.size(); for (int l = mx; l >= 1; --l){ for (int j = 1; j <= m; ++j){ if (a[j].size() >= s.size() && b[j][l] == s){ len = l; pos = j; break; } } if (len != -1)break; s.erase(0, 1); } if (len == -1){ len = 0; pos = 0; } if (num[pos][len] == 0){ num[pos][len] = ++k; g.push_back(make_pair(pos, len)); } aaa.a[i + 1][num[pos][len]]++; } } aaa.n = k; /*for (int i = 0; i < g.size(); ++i){ cout <