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
#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
unsigned long long n;
int m;
int main()
{   
    cin>>n>>m;
    vector<pair<int,int>> rozk(m);
    for (int i=0; i<m; i++){
        cin>>rozk[i].F>>rozk[i].S;
    }
    unsigned long long bound=1<<n;
    vector<bool>wyn(n+1,0);
    for (unsigned long long i=1; i<bound; i++){
        long long l1=__builtin_popcountll(i);
        vector<bool> szereg(n+1,0);
        for (unsigned long long j=0;j<n;j++){
            if((i&(1<<j))!=0)
                szereg[j+1]=1;
        }
        for(auto edg : rozk){
            if(szereg[edg.F]&&!szereg[edg.S]){
                szereg[edg.F]=0;
                szereg[edg.S]=1;
            }
        }
        bool flst=0,flend=0,flzle=0;
        for (long long i=1; i<=n; i++){
            if(szereg[i]&&!flst)
                flst=1;
            if(flst&&!szereg[i]){
                flend=1;
            }
            if(flend&&szereg[i]){
                flzle=1;
            }
        }
        if(!flzle){
            wyn[l1]=!wyn[l1];
        }
    }
    for(int i=1; i<=n; i++){
        cout<<wyn[i]<<" ";
    }
}