#include using namespace std; using LL = long long; #define FOR(i, l, r) for(int i = (l); i <= (r); ++i) #define REP(i, n) FOR(i, 0, (n) - 1) #define ssize(x) int(x.size()) template auto& operator<<(ostream &o, pair p) { return o << '(' << p.first << ", " << p.second << ')'; } template auto operator<<(ostream &o, T x) -> decltype(x.end(), o) { o << '{'; int i = 0; for(auto e : x) o << (", ")+2*!i++ << e; return o << '}'; } ostream& operator<<(ostream &o, string &s) { return o << s.data(); } #ifdef DEBUG #define debug(x...) cerr << "[" #x "]: ", [](auto... $) {((cerr << $ << "; "), ...); }(x), cerr << '\n' #else #define debug(...) {} #endif int main() { cin.tie(0)->sync_with_stdio(0); int n, d; cin >> n >> d; vector> adj(n); REP(i, n - 1) { int a, b; cin >> a >> b; adj[a].emplace_back(b); adj[b].emplace_back(a); } vector par(n), dep(n); function dfs = [&](int v, int p) { par[v] = p; for(int u : adj[v]) { if(u == p) continue; dep[u] = dep[v] + 1; dfs(u, v); } }; dfs(0, -1); int leaves = 0; REP(i, n) if(ssize(adj[i]) == 1) leaves++; if(d >= n - leaves + 1) { cout << "DEFEND\n"; vector pos(d); int xd = 0; REP(i, n) if(ssize(adj[i]) != 1) pos[xd++] = i; vector in_leaf; REP(i, n) { if(ssize(adj[i]) == 1 && xd < d) { pos[xd++] = i; in_leaf.emplace_back(i); } } auto output = [&]() { REP(i, d) cout << (i == 0 ? "" : " ") << pos[i]; cout << endl; }; output(); int a; while(true) { cin >> a; if(a == -1) break; if(ssize(adj[a]) != 1) { cout << 0 << endl; continue; } int l = -1; for(int x : in_leaf) { if(x == a) { l = -1; break; } else l = x; } if(l == -1) { cout << 0 << endl; continue; } vector pref, suff; pref.emplace_back(a); suff.emplace_back(l); while(a != l) { if(dep[a] > dep[l]) { a = par[a]; pref.emplace_back(a); } else { l = par[l]; suff.emplace_back(l); } } pref.pop_back(); reverse(suff.begin(), suff.end()); for(int x : suff) pref.emplace_back(x); cout << ssize(pref) - 1 << " "; REP(i, ssize(pref) - 1) cout << pref[i] << " " << pref[i + 1] << " "; cout << endl; output(); } } else { cout << "ATTACK\n" << flush; mt19937 rng(0); auto rd = [&](int l, int r) { return uniform_int_distribution(l, r)(rng); }; vector initial_detectives(d); for(int &di : initial_detectives) cin >> di; REP(day, 365) { cout << rd(0, n - 1) << '\n' << flush; int k; cin >> k; vector> moves(k); for(auto &p : moves) cin >> p.first >> p.second; debug(k, moves); } cout << "-1\n"; } }