def query(a) puts "? #{a.map { |v| v + 1 }.join(" ")}" res = read_line if res == "Invalid" exit 1 end return res == "Yes" end n = read_line.to_i g = Array.new(n) { [] of Int32 } es = Array.new(n - 1) do u, v = read_line.split.map { |v| v.to_i - 1 } g[u] << v g[v] << u {u, v} end q = [0] depth = Array.new(n, -1) parent = Array.new(n, -1) depth[0] = 0 n.times do |i| cur = q[i] g[cur].each do |adj| next if parent[cur] == adj parent[adj] = cur depth[adj] = depth[cur] + 1 q << adj end end q = es.map { |u, v| depth[u] % 2 == 0 ? u : v }.to_a cands = [] of Int32 if query(q) cands = n.times.select { |i| depth[i] % 2 == 0 }.to_a else cands = n.times.select { |i| depth[i] % 2 == 1 }.to_a end while cands.size > 1 use = cands.first(cands.size // 2).to_set not_use = cands.last((cands.size + 1) // 2).to_set q = es.map { |u, v| use.includes?(u) || not_use.includes?(v) ? u : v }.to_a if query(q) cands.select! { |v| use.includes?(v) } else cands.reject! { |v| use.includes?(v) } end end puts "! #{cands[0] + 1}"