#include #include #include #include #include #include #include #include #include using namespace std; void print(const vector > &v){ int n = v.size(); int m = v[0].size(); for(int i=0; i > &A, vector > &x){ bool valid = true; int rank=0; int n = A.size(); vector< vector > R = A; for(int i=0; i=0; i--){ for(int j=i-1; j>=0; j--){ int c = R[j][i]; for(int k=i; k 0 && j> N; vector D(N); for(int i=0; i> D[i]; D[i] %= N; } //W[i][0] := i番目のコインをひっくり返さねばならないとき1、それ以外は0 vector< vector > W(N, vector(1)); for(int i=0; i> W[i][0]; //今の状態が表(入力:1)なら裏返す必要はないので0、裏(入力:0)なら裏返す必要があるので1 W[i][0] = !W[i][0]; } //C[i][j] := j枚目のコインでi番目のコインがひっくり返る場合1、それ以外は0 vector< vector > C(N, vector(N, 0)); for(int i=0; i