#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; // 行列の基本変形を行い、行列のランクを返す(二値行列) int elementaryMatrix(vector >& mat) { const int n = mat.size(); const int m = mat[0].size(); int y = 0; int x = 0; while(y < n && x < m){ int tmp = y; while(tmp < n && !mat[tmp][x]) ++ tmp; if(tmp < n){ swap(mat[y], mat[tmp]); for(int i=y+1; i> n; vector > v(n); for(int i=0; i> a; v[i] = a; } int ans = 1 << elementaryMatrix(v); cout << ans << endl; return 0; }