#include "testlib.h" #include using namespace std; using ll = long long; using pll = pair; const int MIN_N = 3; const int MAX_N = 20000; const int MAX_Q = 10000; struct DSU { vector parent; DSU(int n) { parent.resize(n); iota(parent.begin(), parent.end(), 0); } int find(int i) { if (parent[i] == i) return i; return parent[i] = find(parent[i]); } bool unite(int i, int j) { int root_i = find(i); int root_j = find(j); if (root_i != root_j) { parent[root_i] = root_j; return true; } return false; } }; int main() { registerValidation(); int N = inf.readInt(MIN_N, MAX_N); inf.readSpace(); long long max_q_limit = min((long long)MAX_Q, 1LL * N * (N - 1) / 2); int Q = inf.readInt(1, max_q_limit); inf.readEoln(); DSU dsu(N); set> edges; for (int i = 0; i < N - 1; ++i) { int u = inf.readInt(0, N - 1); inf.readSpace(); int v = inf.readInt(0, N - 1); inf.readEoln(); ensure(u != v); int min_v = min(u, v); int max_v = max(u, v); ensure(edges.insert({min_v, max_v}).second); ensure(dsu.unite(u, v)); } for(int i = 0; i < N - 1; ++i){ cout << 0 << (i == N - 2 ? "\n" : " "); cout.flush(); } for (int i = 0; i < Q; ++i) { int u = inf.readInt(0, N - 1); inf.readSpace(); int v = inf.readInt(0, N - 1); inf.readEoln(); ensure(u != v); int min_v = min(u, v); int max_v = max(u, v); ensure(edges.insert({min_v, max_v}).second); cout << 0 << endl; } inf.readEof(); }