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
93
94
95
96
#include<iostream>
using namespace std;
unsigned long long pow(int n, int k)
{
	unsigned long long sn=1, sk=1, s=1, nk=n-k, p;
	for(int i=1; i<=n; i++)
	sn*=i;
	
	for(int j=1; j<=k; j++)
	sk*=j;
	
	for(int l=1; l<=nk; l++)
	s*=l;
	
	p=sn/(sk*s);
	
	return p;
}
unsigned long long bin(int a)
{
	unsigned long long w=1, b=0;
	
	while(a!=0)
	{
		b+=a%2*w;
		a/=2;
		w*=10;
	}

	return b;
}
int main()
{
	int n, m;
	cin>>n>>m;
	int t[n], rj[m], rd[m], iw[n]={0}, a, lz, c, k, d=0, b; //iw - ilosc kombinacji spelniajacych warunek po rozkazach, lz-liczba roznic miedzy gotowoscia
	
	for(int ki=1; ki<=n; ki++) 
	{
		d+=pow(n, ki);
	}

	for(int e=0; e<m; e++) //uzupelnienie tablicy z rozkazami
	{
		cin>>rj[e]>>rd[e];
	}

	for(int i=1; i<=d; i++) //ulozenie gotowych
	{
		lz=0;
		k=0;
		a=bin(i);
	
		for(int j=n-1; j>=0; j--) //wczytanie ulozenia do tablicy
		{
			if(a==0)
			t[j]=0;
			else
			{
				t[j]=a%10;
				a/=10;
			}
		}
			
		for(int l=0; l<m; l++) //wykonanie rozkazow
		{
			b=rj[l];
			c=rd[l];
			if(t[b-1]==1 && t[c-1]==0)
			{
				t[b-1]--;
				t[c-1]++;
			}
		}
	
		for(int x=1; x<n; x++) //sprawdzenie ciagu
		{
			if(t[x-1]==0 && t[x]==1)
			lz++;
		}
		
		for(int x=0; x<n; x++)
		{
			if(t[x]==1)
			k++;
		}
		
		if((t[0]==0 && lz==1) || lz==0 || k==1)
		iw[k-1]++;
	}

	for(int z=0; z<n; z++)
	cout<<iw[z]%2<<" ";
	
	return 0;
}