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
#include <bits/stdc++.h>
using namespace std;

namespace std {

template<class Fun>
class y_combinator_result {
	Fun fun_;
public:
	template<class T>
	explicit y_combinator_result(T &&fun): fun_(std::forward<T>(fun)) {}

	template<class ...Args>
	decltype(auto) operator()(Args &&...args) {
		return fun_(std::ref(*this), std::forward<Args>(args)...);
	}
};

template<class Fun>
decltype(auto) y_combinator(Fun &&fun) {
	return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun));
}

} // namespace std

int main(){
	ios_base::sync_with_stdio(false), cin.tie(nullptr);
	int N, M;
	cin >> N >> M;
	vector<pair<int,int> > ops(M);
	for(int i = 0; i < M; i++){
		cin >> ops[i].first >> ops[i].second;
		ops[i].first--; ops[i].second--;
	}
	using state_t = array<char, 35>;
	state_t empty;
	for(int i = 0; i < 35; i++) empty[i] = 1;
	vector<int> ans(N+1, 0);
	y_combinator(
		[&](auto self, int st, state_t a) -> void {
			for(int cur = st; cur < M; cur++){
				auto [x, y] = ops[cur];
				if(a[x] == 1 && a[y] == 1){
					a[x] = 0;
					a[y] = 0;
					self(cur+1, a);
					a[x] = 2;
					a[y] = 2;
					self(cur+1, a);
					return;
				}
				if(a[x] > a[y]) swap(a[x], a[y]);
			}
			int min2 = N-1;
			int max2 = 0;
			for(int i = 0; i < N; i++){
				if(a[i] == 2){
					min2 = min(min2, i);
					max2 = max(max2, i);
				}
			}
			for(int l = 0; l <= min2; l++){
				int r = l;
				while(r < N){
					if(a[r] == 0) break;
					if(l <= min2 && r >= max2) ans[r-l+1] ^= 1;
					r++;
				}
			}
		}
	)(0, empty);
	for(int i = 1; i <= N; i++){
		cout << ans[i] << " \n"[i == N];
	}
}