#include<iostream> #include<cstdio> using namespace std;
int n, a[105][105];
int gauss() { int r, l; for (r = l = 1; l <= n; l++) { int t = r; for (int i = r; i <= n; i++) if (a[i][l]) t = i; if (!a[t][l]) continue; for (int i = l; i <= n + 1; i++) swap(a[t][i], a[r][i]); for (int i = r + 1; i <= n; i++) if (a[i][l]) for (int j = l; j <= n + 1; j++) a[i][j] ^= a[r][j]; r++; } if (r <= n) { for (int i = r; i <= n; i++) if (a[i][n + 1]) return 2; return 1; } for (int i = n; i >= 1; i--) for (int j = i + 1; j <= n; j++) a[i][n + 1] ^= a[i][j] & a[j][n + 1]; return 0; }
int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) for (int j = 1; j <= n + 1; j++) scanf("%d", &a[i][j]); int t = gauss(); if (t == 2) printf("No solution"); else if (t == 1) printf("Multiple sets of solutions"); else { for (int i = 1; i <= n; i++) printf("%d\n", a[i][n + 1]); } }
#include<iostream> #include<cstdio> using namespace std;
int n, a[105][105];
int gauss() { int r, l; for (r = l = 1; l <= n; l++) { int t = r; for (int i = r; i <= n; i++) if (a[i][l]) t = i; if (!a[t][l]) continue; for (int i = l; i <= n + 1; i++) swap(a[t][i], a[r][i]); for (int i = r + 1; i <= n; i++) if (a[i][l]) for (int j = l; j <= n + 1; j++) a[i][j] ^= a[r][j]; r++; } if (r <= n) { for (int i = r; i <= n; i++) if (a[i][n + 1]) return 2; return 1; } for (int i = n; i >= 1; i--) for (int j = i + 1; j <= n; j++) a[i][n + 1] ^= a[i][j] & a[j][n + 1]; return 0; }
int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) for (int j = 1; j <= n + 1; j++) scanf("%d", &a[i][j]); int t = gauss(); if (t == 2) printf("No solution"); else if (t == 1) printf("Multiple sets of solutions"); else { for (int i = 1; i <= n; i++) printf("%d\n", a[i][n + 1]); } }