#include <iostream>
#include <vector>
#include <algorithm>
#include <bitset>
#define ll long long
using namespace std;
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
ll n, m;
cin >> n >> m;
vector <pair<ll, ll>> ruchy (m);
for (ll i = 0; i < m; i++){
cin >> ruchy[i].first >> ruchy[i].second;
ruchy[i].first--; ruchy[i].second--;
}
for (ll k = 1; k <= n; k++){
ll maska = 0;
ll akt = 0;
for (ll i = 0; i < k; i++){
maska += ((ll)1 << i);
}
ll licznik = 0;
while (maska < ((ll) 1 << n)){
vector <ll> stany1;
vector <ll> stany2;
stany1.push_back(maska);
for (ll i = m-1; i >= 0; i--){
ll pom = (m-1)%2;
if (i % 2 == pom){
for (ll j = 0; j < stany1.size(); j++){
ll a = stany1[j] & ((ll)1 << ruchy[i].first);
ll b = stany1[j] & ((ll)1 << ruchy[i].second);
if (a > 0) a = 1;
if (b > 0) b = 1;
if ((a == 0 && b == 0) || (a == 1 && b == 1)){
stany2.push_back(stany1[j]);
}else if (a == 0 && b == 1){
stany2.push_back(stany1[j]);
stany2.push_back(stany1[j] - ((ll)1 << ruchy[i].second) + ((ll)1 << ruchy[i].first));
}
}
stany1.clear();
}else{
for (ll j = 0; j < stany2.size(); j++){
ll a = stany2[j] & ((ll)1 << ruchy[i].first);
ll b = stany2[j] & ((ll)1 << ruchy[i].second);
if (a > 0) a = 1;
if (b > 0) b = 1;
if ((a == 0 && b == 0) || (a == 1 && b == 1)){
stany1.push_back(stany2[j]);
}else if (a == 0 && b == 1){
stany1.push_back(stany2[j]);
stany1.push_back(stany2[j] - ((ll)1 << ruchy[i].second) + ((ll)1 << ruchy[i].first));
}
}
stany2.clear();
}
}
if ((m-1) % 2 == 0){
licznik += stany2.size();
}else{
licznik += stany1.size();
}
licznik %= 2;
maska -= ((ll) 1 << akt);
maska += ((ll) 1 << (akt + k));
akt++;
}
cout << licznik << " ";
}
cout << "\n";
}
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 | #include <iostream> #include <vector> #include <algorithm> #include <bitset> #define ll long long using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n, m; cin >> n >> m; vector <pair<ll, ll>> ruchy (m); for (ll i = 0; i < m; i++){ cin >> ruchy[i].first >> ruchy[i].second; ruchy[i].first--; ruchy[i].second--; } for (ll k = 1; k <= n; k++){ ll maska = 0; ll akt = 0; for (ll i = 0; i < k; i++){ maska += ((ll)1 << i); } ll licznik = 0; while (maska < ((ll) 1 << n)){ vector <ll> stany1; vector <ll> stany2; stany1.push_back(maska); for (ll i = m-1; i >= 0; i--){ ll pom = (m-1)%2; if (i % 2 == pom){ for (ll j = 0; j < stany1.size(); j++){ ll a = stany1[j] & ((ll)1 << ruchy[i].first); ll b = stany1[j] & ((ll)1 << ruchy[i].second); if (a > 0) a = 1; if (b > 0) b = 1; if ((a == 0 && b == 0) || (a == 1 && b == 1)){ stany2.push_back(stany1[j]); }else if (a == 0 && b == 1){ stany2.push_back(stany1[j]); stany2.push_back(stany1[j] - ((ll)1 << ruchy[i].second) + ((ll)1 << ruchy[i].first)); } } stany1.clear(); }else{ for (ll j = 0; j < stany2.size(); j++){ ll a = stany2[j] & ((ll)1 << ruchy[i].first); ll b = stany2[j] & ((ll)1 << ruchy[i].second); if (a > 0) a = 1; if (b > 0) b = 1; if ((a == 0 && b == 0) || (a == 1 && b == 1)){ stany1.push_back(stany2[j]); }else if (a == 0 && b == 1){ stany1.push_back(stany2[j]); stany1.push_back(stany2[j] - ((ll)1 << ruchy[i].second) + ((ll)1 << ruchy[i].first)); } } stany2.clear(); } } if ((m-1) % 2 == 0){ licznik += stany2.size(); }else{ licznik += stany1.size(); } licznik %= 2; maska -= ((ll) 1 << akt); maska += ((ll) 1 << (akt + k)); akt++; } cout << licznik << " "; } cout << "\n"; } |
English