#include using namespace std; const long long MOD = 998244353; int main(void){ //cin.tie(nullptr); //ios::sync_with_stdio(false); long long N,M; cin >> N >> M; vector> S(M); for(int i=0;i> t; S[i].resize(t); for(int j=0;j> S[i][j]; S[i][j]--; } } //置換を作成する vector F(N); for(int i=0;i inverse = F; for(int i=0;i=0;j--){ inverse[S[i][j+1]] = inverse[S[i][j]]; } inverse[S[i][0]] = tmp; } //サイクルの個数を考える vector visited(N,false); vector C; for(int i=0;i Map; for(long long c:C){ vector> E; long long k = c; for(int i=2;i*i<=c;i++){ if(k%i==0){ E.push_back({i,0}); } while(k%i==0){ k/=i; E.back().second++; } } if(k!=1){ E.push_back({k,1}); } for(pair p:E){ Map[p.first] = max(Map[p.first],p.second); } } long long Ans = 1; for(auto it = Map.begin();it!=Map.end();it++){ for(int i=0;i<(it->second);i++){ Ans = (Ans*(it->first))%MOD; } } //答えを出力する cout << Ans << endl; return 0; }