Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8. Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
 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
#include <stdio.h>

long ludzi,rozkazow, rozkazy[1001][3], got, pocz;
long Odp[41];
char tab[40];



int SPROBUJ(long nr_rozk)
{
if (nr_rozk==0) { Odp[got]++; return 0; }

// Sprawdzam, czy ten rozkaz "co� zrobi".
if (  ( tab[rozkazy[nr_rozk][1]] == 1 )  &&  ( tab[rozkazy[nr_rozk][2]] == 0 )  )
	{
	 // Tzn. �e ten rozkaz blokuje - nic si� nie da zrobi�.
	 return 0;
	}
// W ka�dym innym przypadku ten rozstaw przechodzi dalej.
SPROBUJ(nr_rozk-1);

// Ale je�li jest dok�adnie na odwr�t, to powstaje rozwidlenie:
if (  ( tab[rozkazy[nr_rozk][1]] == 0 )  &&  ( tab[rozkazy[nr_rozk][2]] == 1 )  )
	{
	 tab[rozkazy[nr_rozk][1]] = 1;   tab[rozkazy[nr_rozk][2]] = 0;
	 SPROBUJ(nr_rozk-1);
	 tab[rozkazy[nr_rozk][1]] = 0;   tab[rozkazy[nr_rozk][2]] = 1;
	}

return 0;
}




int main()
{
scanf("%ld",&ludzi);
scanf("%ld",&rozkazow);
for (int ii=1; ii<=rozkazow; ii++)
	{
	 scanf("%ld %ld",&rozkazy[ii][1],&rozkazy[ii][2]);
	}

for (int ii=1; ii<=40; ii++) Odp[ii]=0;
Odp[1]=ludzi;
Odp[ludzi]=1;

// A dla liczby Gotowych od 2 do ludzi-1 trzeba to dopiero policzy�...
for (got=2; got<ludzi; got++)
	{
	 // Spr�buj� rekurencyjnie...
	 // Najpierw musz� ka�d� z opcji "ko�cowego stanu" ustawi�
	 for (pocz=1; pocz <= ludzi-got+1; pocz++)
	 	{
		 for (int ii=1; ii<=ludzi; ii++) tab[ii]=0;
		 for (int ii=pocz; ii<=pocz+got-1; ii++) tab[ii]=1;
		 
		 // Tu mam gotowy rozstaw pocz�tkowy, teraz musz� sprawdzi� kolejne rozkazy
		 SPROBUJ(rozkazow);
		 
	 	}
	}


//for (int ii=1; ii<=ludzi; ii++) printf("%ld ",Odp[ii]);
//printf("\n");

for (int ii=1; ii<=ludzi; ii++)
	{
	 if (Odp[ii]%2==0) printf("0 ");
	 else printf("1 ");
	}




return 0;
}