#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace atcoder; //using mint = modint998244353; #define rep(i,n) for (int i=0;i-1;i--) #define append push_back #define all(x) (x).begin(), (x).end() template using vec = vector; template using vvec = vec>; template using vvvec = vec>; using ll = long long; using pii = pair; using pll = pair; template bool chmin(T &a, T b){ if (a>b){ a = b; return true; } return false; } template bool chmax(T &a, T b){ if (a T sum(vec x){ T res=0; for (auto e:x){ res += e; } return res; } template void printv(vec x){ for (auto e:x){ cout<>= 1; } return res; } const int mod = 90001; const int r = 13; const int r_60 = lpow(r,1500,mod); int main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); string N; int M; cin>>N>>M; vec exp = {1}; int k; rep(i,M){ vec exp_f(90001); cin>>k; vec A(k); rep(j,k){ cin>>A[j]; } rep(bit,(1<>j) & 1){ cnt += 1; L = lcm(L,A[j]); } } if (cnt==0){ continue; } ll inv = lpow(L,mod-2,mod); int a = lpow(r_60,60/L,mod); if (cnt&1){ rep(j,L){ exp_f[lpow(a,j,mod)] += inv; exp_f[lpow(a,j,mod)] %= mod; } } else{ rep(j,L){ exp_f[lpow(a,j,mod)] -= inv; if (exp_f[lpow(a,j,mod)] < 0){ exp_f[lpow(a,j,mod)] += mod; } exp_f[lpow(a,j,mod)] %= mod; } } } exp = convolution_ll(exp,exp_f); for (int j=mod;j