#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
using namespace std;
using lol = long long;
int nextInt() { int n; scanf("%d", &n); return n; }
const int N = 35 + 9;
const int M = 1000 + 9;
const lol ONE = 1;
int n;
int m;
int a[M];
int b[M];
lol mask[M];
lol good[M];
lol bad[M];
void show(lol s) {
for (int i = 0; i < n; ++i) {
int last = s & ONE;
s >>= 1;
printf("%d", last);
}
}
void solve(deque<lol> &v) {
for (int i = m - 1; i >= 0; --i) {
int cnt = v.size();
if (0 == cnt)
break;
for (int j = 0; j < cnt; ++j) {
lol ss = v.front();
v.pop_front();
lol ssm = ss & mask[i];
if (ssm == good[i]) {
v.push_back(ss);
v.push_back(ss ^ mask[i]);
} else if (ssm != bad[i]) {
v.push_back(ss);
}
}
}
}
int main() {
n = nextInt();
m = nextInt();
for (int i = 0; i < m; ++i) {
a[i] = nextInt() - 1;
b[i] = nextInt() - 1;
good[i] = ONE << b[i];
bad[i] = ONE << a[i];
mask[i] = good[i] | bad[i];
}
printf("%d", n % 2);
lol base = 1;
for (int k = 2; k < n; ++k) {
base = base * 2 + 1;
deque<lol> v;
int cnt = n - k + 1;
for (int i = 0; i < cnt; ++i)
v.push_back(base << i);
solve(v);
printf(" %d", v.size() % 2);
}
printf(" %d\n", 1);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <cstdio> #include <vector> #include <map> #include <set> #include <queue> #include <unordered_map> #include <unordered_set> #include <algorithm> using namespace std; using lol = long long; int nextInt() { int n; scanf("%d", &n); return n; } const int N = 35 + 9; const int M = 1000 + 9; const lol ONE = 1; int n; int m; int a[M]; int b[M]; lol mask[M]; lol good[M]; lol bad[M]; void show(lol s) { for (int i = 0; i < n; ++i) { int last = s & ONE; s >>= 1; printf("%d", last); } } void solve(deque<lol> &v) { for (int i = m - 1; i >= 0; --i) { int cnt = v.size(); if (0 == cnt) break; for (int j = 0; j < cnt; ++j) { lol ss = v.front(); v.pop_front(); lol ssm = ss & mask[i]; if (ssm == good[i]) { v.push_back(ss); v.push_back(ss ^ mask[i]); } else if (ssm != bad[i]) { v.push_back(ss); } } } } int main() { n = nextInt(); m = nextInt(); for (int i = 0; i < m; ++i) { a[i] = nextInt() - 1; b[i] = nextInt() - 1; good[i] = ONE << b[i]; bad[i] = ONE << a[i]; mask[i] = good[i] | bad[i]; } printf("%d", n % 2); lol base = 1; for (int k = 2; k < n; ++k) { base = base * 2 + 1; deque<lol> v; int cnt = n - k + 1; for (int i = 0; i < cnt; ++i) v.push_back(base << i); solve(v); printf(" %d", v.size() % 2); } printf(" %d\n", 1); return 0; } |
English