#include #include using namespace std; using namespace atcoder; using mint = modint998244353; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector p(n); iota(p.begin(), p.end(), 0); while (m--) { int k; cin >> k; vector pos(k); for (int i = 0; i < k; i++) { cin >> pos[i]; pos[i]--; } int st = p[pos[k - 1]]; for (int i = k - 1; i > 0; i--) { p[pos[i]] = p[pos[i - 1]]; } p[pos[0]] = st; } vector fct(n + 1), cnt(n + 1); for (int i = 2; i <= n; i++) { if (fct[i] == 0) { fct[i] = i; for (int j = i; j * i <= n; j++) { fct[i * j] = i; } } } for (int i = 0; i < n; i++) { if (p[i] != -1) { int cur = -1; for (int u = i; u != -1; cur++) { int v = p[u]; p[u] = -1; u = v; } for (; cur != 1; ) { int d = fct[cur], cd = 0; while (cur % d == 0) { cd++; cur /= d; } cnt[d] = max(cnt[d], cd); } } } mint ans = 1; for (int i = 2; i <= n; i++) { ans *= mint(i).pow(cnt[i]); } cout << ans.val(); }