#include <bits/stdc++.h>
#define pii pair<int, int>
using namespace std;
const int MAX = 18;
vector<int> G[MAX], T[1 << MAX];
int S[MAX];
void DFS(int cur1, int prev, int cur2) {
S[cur1] = cur2;
for (int i = 0, j = 0; i < G[cur1].size(); ++i, ++j) {
int next1 = G[cur1][i];
if (next1 == prev) continue;
if (S[next1] == T[cur2][j]) j++;
int next2 = T[cur2][j];
DFS(next1, cur1, next2);
}
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int N;
cin >> N;
for (int i = 0; i < N; ++i) {
int a, b;
cin >> a >> b;
G[a].push_back(b);
G[b].push_back(a);
}
for (int i = 0; i < (1 << N); ++i) for (int k = 0; k < N; ++k) T[i].push_back(i ^ (1 << k));
memset(S, -1, sizeof(S));
DFS(0, 0, 0);
int Z = 1 << (N - 1);
cout << Z << '\n';
for (int b = 0; b < (1 << N); ++b) {
if (__builtin_popcount(b) & 1) continue;
for (int i = 0; i <= N; ++i) cout << (S[i] ^ b) << ' ';
cout << '\n';
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |