#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
#include<ctime>
#include<cstring>
using namespace std;
int main() {
ios::sync_with_stdio(0);
int N,M;
vector< pair<long long, long long> > V;
V.push_back(make_pair((long long)0,(long long)0));
long long I[36];
cin>>N>>M;
for(int i=1; i<=N; ++i) I[i] = (long long)1 << (i-1);
for(int i=0; i<M; ++i) {
int a,b;
cin>>a>>b;
for(int j=0; j<V.size(); ++j) {
long long k,w;
k = V[j].first;
w = V[j].second;
if(((I[a] & k) == 0) && ((I[a] & w) == 0) && ((I[b] & k) == 0) && ((I[b] & w) == 0)) {
k = ((k ^ I[a]) ^ I[b]);
w = ((w ^ I[a]) ^ I[b]);
V.push_back(make_pair(V[j].first,w));
V[j].first = k;
}
else if((I[a] & w) != 0) {
}
else if((I[b] & k) != 0) {
}
else if(((I[a] & k) != 0) && ((I[b] & w) == 0)) {
k = (k ^ I[a]) ^ I[b];
V[j].first = k;
}
else if(((I[a] & k) == 0) && ((I[b] & w) != 0)) {
w = (w ^ I[a]) ^ I[b];
V[j].second = w;
}
else {
k = (k ^ I[a]) ^ I[b];
w = (w ^ I[a]) ^ I[b];
V[j].first = k;
V[j].second = w;
}
}
}
long long tab[36][36];
long long cz[36][36];
for(int i=0; i<36; ++i) for(int j=0; j<36; ++j) tab[i][j] = cz[i][j] = 0;
for(int k=1; k<=N; ++k) tab[1][N] += I[k];
for(int i=1; i<=N; ++i) {
for(int j=i; j<=N; ++j) {
for(int k=i; k<=j; ++k) if((i != 1) || (j != N)) tab[i][j] += I[k];
for(int k=0; k<V.size(); ++k) {
if(((V[k].first & (tab[i][j] ^ tab[1][N])) == 0) && ((V[k].second & tab[i][j]) == 0)) cz[i][j]++;
}
}
}
long long suma[36];
for(int j=1; j<=N; ++j) for(int i=1; i+j-1<=N; ++i) suma[j] += cz[i][i+j-1];
for(int i=1; i<=N; ++i) cout<<(suma[i] % 2)<<" ";
cout<<endl;
return 0;
}
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 | #include<iostream> #include<algorithm> #include<vector> #include<cmath> #include<ctime> #include<cstring> using namespace std; int main() { ios::sync_with_stdio(0); int N,M; vector< pair<long long, long long> > V; V.push_back(make_pair((long long)0,(long long)0)); long long I[36]; cin>>N>>M; for(int i=1; i<=N; ++i) I[i] = (long long)1 << (i-1); for(int i=0; i<M; ++i) { int a,b; cin>>a>>b; for(int j=0; j<V.size(); ++j) { long long k,w; k = V[j].first; w = V[j].second; if(((I[a] & k) == 0) && ((I[a] & w) == 0) && ((I[b] & k) == 0) && ((I[b] & w) == 0)) { k = ((k ^ I[a]) ^ I[b]); w = ((w ^ I[a]) ^ I[b]); V.push_back(make_pair(V[j].first,w)); V[j].first = k; } else if((I[a] & w) != 0) { } else if((I[b] & k) != 0) { } else if(((I[a] & k) != 0) && ((I[b] & w) == 0)) { k = (k ^ I[a]) ^ I[b]; V[j].first = k; } else if(((I[a] & k) == 0) && ((I[b] & w) != 0)) { w = (w ^ I[a]) ^ I[b]; V[j].second = w; } else { k = (k ^ I[a]) ^ I[b]; w = (w ^ I[a]) ^ I[b]; V[j].first = k; V[j].second = w; } } } long long tab[36][36]; long long cz[36][36]; for(int i=0; i<36; ++i) for(int j=0; j<36; ++j) tab[i][j] = cz[i][j] = 0; for(int k=1; k<=N; ++k) tab[1][N] += I[k]; for(int i=1; i<=N; ++i) { for(int j=i; j<=N; ++j) { for(int k=i; k<=j; ++k) if((i != 1) || (j != N)) tab[i][j] += I[k]; for(int k=0; k<V.size(); ++k) { if(((V[k].first & (tab[i][j] ^ tab[1][N])) == 0) && ((V[k].second & tab[i][j]) == 0)) cz[i][j]++; } } } long long suma[36]; for(int j=1; j<=N; ++j) for(int i=1; i+j-1<=N; ++i) suma[j] += cz[i][i+j-1]; for(int i=1; i<=N; ++i) cout<<(suma[i] % 2)<<" "; cout<<endl; return 0; } |
English