#include using namespace std; vector encode(const vector>& G) { int N = (int)G.size(); vector deg(N); priority_queue, greater> Q; for (int v = 0; v < N; ++v) { deg[v] = (int)G[v].size(); if (deg[v] == 1) Q.push(v); } vector P; for (int i = 0; i < N - 2; ++i) { int u = Q.top(); Q.pop(); int v = -1; for (int w : G[u]) { if (deg[w] > 0) { v = w; break; } } P.push_back(v); deg[u] = 0; --deg[v]; if (deg[v] == 1) Q.push(v); } return P; } vector> decode(int N, const vector& P) { vector cnt(N, 0); for (int v : P) ++cnt[v]; priority_queue, greater> Q; for (int v = 0; v < N; ++v) { if (cnt[v] == 0) Q.push(v); } vector> E; for (int i = 0; i < N - 2; ++i) { int u = Q.top(); Q.pop(); int v = P[i]; E.emplace_back(u, v); --cnt[v]; if (cnt[v] == 0) Q.push(v); } int u = Q.top(); Q.pop(); int v = Q.top(); Q.pop(); E.emplace_back(u, v); return E; } void Alice() { int N; cin >> N; cout << N - 2 << endl; vector> G(N); for (int i = 0; i < N - 1; ++i) { int u, v; cin >> u; if (u == -1) return; cin >> v; if (v == -1) return; --u; --v; G[u].push_back(v); G[v].push_back(u); } vector P = encode(G); for (int i = 0; i < N - 2; ++i) { if (i) cout << ' '; cout << P[i] + 1; } cout << endl; } void Bob() { int N; cin >> N; cout << N - 2 << endl; vector P(N - 2); for (int& v : P) { cin >> v; if (v == -1) return; --v; } vector> E = decode(N, P); for (auto [u, v] : E) { cout << u + 1 << ' ' << v + 1 << endl; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); string player; cin >> player; if (player == "Alice") Alice(); if (player == "Bob") Bob(); return 0; }