コード
#include <bits/stdc++.h>
using namespace std;
int64_t extgcd(int64_t a, int64_t b, int64_t &x, int64_t &y) {
int64_t d = a;
if (b != 0) {
d = extgcd(b, a % b, y, x);
y -= (a / b) * x;
} else {
x = 1;
y = 0;
}
return d;
}
int64_t mod_inverse(int64_t a, int64_t m) {
int64_t x, y;
extgcd(a, m, x, y);
return (m + x % m) % m;
}
int64_t det(vector<vector<int>> A, const int64_t MOD) {
int n = A.size();
assert(n == A[0].size());
int64_t ans = 1;
for (int i = 0; i < n; i++) {
int pivot = i;
while (pivot < n && !A[pivot][i]) pivot++;
if (pivot == n) return 0;
if (i != pivot) {
swap(A[i], A[pivot]);
ans *= -1;
}
int64_t inv = mod_inverse(A[i][i], MOD);
for (int j = i + 1; j < n; j++) {
int64_t c = A[j][i] * inv % MOD;
for (int k = i; k < n; k++) {
A[j][k] = (A[j][k] - c * A[i][k]) % MOD;
}
}
}
for (int i = 0; i < n; ++i) ans = (ans * A[i][i]) % MOD;
if (ans < 0) ans += MOD;
return ans;
}
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
int N;
cin >> N;
vector<vector<int>> M(N, vector<int>(N, 0));
for (int i = 0; i < N; ++i) {
string S;
cin >> S;
for (int j = 0; j < N; ++j) {
if (S[j] == '1') M[i][j] = 1;
}
}
cout << (det(M, 2) ? "Odd" : "Even") << endl;
}