#ifdef NACHIA #define _GLIBCXX_DEBUG #else // disable assert #define NDEBUG #endif #include #include #include #include #include using namespace std; using ll = long long; const ll INF = 1ll << 60; #define REP(i,n) for(ll i=0; i using V = vector; template void chmax(A& l, const B& r){ if(l < r) l = r; } template void chmin(A& l, const B& r){ if(r < l) l = r; } V> from_preufer(ll N, vector Y){ V> res; V cnt(N); cnt[N-1] = 1; for(ll i=0; i que; for(ll i=0; i> edges(N-1); REP(i,N-1){ ll u,v; cin >> u >> v; u--; v--; edges[i] = {u,v}; } V ans; V used(N); REP(i,N-2){ V deg(N); for(auto [u,v] : edges) if(!used[u] && !used[v]){ deg[u]++; deg[v]++; } ll leaf = -1; for(ll j=N-2; j>=0; j--) if(deg[j] == 1 && !used[j]) leaf = j; for(auto [u,v] : edges) if(!used[u] && !used[v]){ if(u == leaf){ ans.push_back(v); } if(v == leaf){ ans.push_back(u); } } used[leaf] = 1; } REP(i,N-2){ if(i) cout << " "; cout << (ans[i] + 1); } cout << endl; } void Bob(ll N){ V A(N-2); for(auto& a : A){ cin >> a; a--; } auto tree = from_preufer(N, A); for(auto [u,v] : tree) cout << (u+1) << " " << (v+1) << endl; } void testcase(){ string player; cin >> player; ll N; cin >> N; cout << (N-2) << endl; if(player[0] == 'A') Alice(N); else Bob(N); } int main(){ cin.tie(0)->sync_with_stdio(0); // ll T; cin >> T; REP(t,T) testcase(); return 0; }