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
#include <cstdio>
#include <vector>
#include <algorithm>
#define MAKSN 40
#define MAKSM 1010
using namespace std;
typedef long long int lld;
int a[MAKSM];
int b[MAKSM];
int wyn[MAKSN];
int main()
{
	int n,m;
	scanf("%d %d",&n,&m);
	for(int i=0;i<m;i++)
	{
		scanf("%d %d",&a[i],&b[i]);
		a[i]--;
		b[i]--;
	}
	for(int i=0;i<n;i++)
	{
		for(int j=i;j<n;j++)
		{
			lld start=(1LL << lld(j+1))-(1LL << lld(i));
			vector<lld> zbior[2];
			int akt=0;
			zbior[akt].push_back(start);
			for(int q=m-1;q>=0;q--)
			{
				akt=1-akt;
				zbior[akt].clear();
				for(lld v: zbior[1-akt])
				{
					bool A=((1LL << lld(a[q]))&v)>0;
					bool B=((1LL << lld(b[q]))&v)>0;
					if(A)
					{
						if(B)zbior[akt].push_back(v);
						else continue;
					}
					else
					{
						if(B)
						{
							zbior[akt].push_back(v);
							zbior[akt].push_back(v-(1LL << lld(b[q]))+(1LL << lld(a[q])));
						}
						else zbior[akt].push_back(v);
					}
				}
			}
			//printf("%d %d: %d\n", i,j,zbior[akt].size());
			sort(zbior[akt].begin(), zbior[akt].end());
			auto w=unique(zbior[akt].begin(), zbior[akt].end());
			wyn[j-i+1]+=(w-zbior[akt].begin());
		}
	}
	for(int i=1;i<=n;i++)printf("%d ",(wyn[i]%2));
	printf("\n");
}