// naive #include using namespace std; #include typedef atcoder::modint998244353 mint; mint det(vector> &a){ assert(a.size() == a[0].size()); int n = (int)a.size(); vector> b = a; int piv = 0; mint ret = 1; for (int j=0; j> k; int cnt = 2; vector a, b; vector s, t; for(int i=0; i> n >> m; a.push_back(0); b.push_back(cnt); a.push_back(1); b.push_back(cnt + 1); for (int j=0; j> x >> y; x--; y--; a.push_back(x + cnt); b.push_back(y + cnt); } cnt += n; } vector mat(cnt-1, vector(cnt-1)); for (int i=0; i<(int)a.size(); i++) { if (a[i] - 1 >= 0 && b[i] - 1 >= 0) { mat[a[i]-1][b[i]-1] -= 1; mat[b[i]-1][a[i]-1] -= 1; } if (a[i] - 1 >= 0) { mat[a[i]-1][a[i]-1] += 1; } if (b[i] - 1 >= 0) { mat[b[i]-1][b[i]-1] += 1; } } cout << det(mat).val() << endl; }