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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <bits/stdc++.h>

using namespace std;

//#define int long long
#define fi first
#define se second

const int MAXN = 35 + 7;
const int INF = 1e9 + 7;

int ans[MAXN];
pair<int, int> que[MAXN * MAXN];
int active[MAXN];


void solve(){
	
	int n, m;
	cin >> n >> m;
	
	for(int i = 1; i <= m; i++){
		
		cin >> que[i].fi >> que[i].se;
		que[i].fi; que[i].se;
	}
	
	for(int mask = 1; mask < (1<<n); mask++){
		
		int ile = 0;
		
		for(int i = 0; i < n; i++){
			
			if(mask & (1<<i)){
				
				active[i + 1] = 1;
				ile++;
			}
			else active[i + 1] = 0;
		}
		
		vector<int> v(n + 1, 0);
		for(int i = 1; i <= n; i++) v[i] = i;
		
		for(int i = 1; i <= m; i++){
			
			if(active[v[que[i].fi]] == 1 && active[v[que[i].se]] == 0) swap(v[que[i].fi], v[que[i].se]);
		}
		
		int fst = n + 1, lst = 0;
		
		for(int i = 1; i <= n; i++){
			
			if(active[v[i]] == 1){
				
				fst = min(fst, i);
				lst = i;
			}
		}
		
		int ok = 1;
		
		for(int i = fst; i <= lst; i++){
			
			if(active[v[i]] == 0) ok = 0;
		}
		
		ans[ile] += ok;
	}
	
	for(int i = 1; i <= n; i++){
		
		cout << ans[i]%2 << ' ';
	}
	
	cout << '\n';
}



signed main(){
	
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	
	int t = 1;
	//cin >> t;
	
	while(t--) solve();	
	
	return 0;
}