Good Bye 2016
F
New Year and Finding Roots
Codeforces
2800
原题
← EG →
翻译中…

This is an interactive problem. In the interaction section below you will find the information about flushing the output.

翻译中…

The New Year tree of height $*h*$ is a perfect binary tree with vertices numbered $1$ through $2^{*h*} - 1$ in some order. In this problem we assume that $*h*$ is at least $2$. The drawing below shows one example New Year tree of height $3$:

翻译中…

image

翻译中…

Polar bears love decorating the New Year tree and Limak is no exception. To decorate the tree, he must first find its root, i.e. a vertex with exactly two neighbours (assuming that $*h* ≥ 2$). It won't be easy because Limak is a little bear and he doesn't even see the whole tree. Can you help him?

翻译中…

There are $*t*$ testcases. In each testcase, you should first read $*h*$ from the input. Then you can ask at most $16$ questions of format "? x" (without quotes), where $*x*$ is an integer between $1$ and $2^{*h*} - 1$, inclusive. As a reply you will get the list of neighbours of vertex $*x*$ (more details in the "Interaction" section below). For example, for a tree on the drawing above after asking "? 1" you would get a response with $3$ neighbours: $4$, $5$ and $7$. Your goal is to find the index of the root $*y*$ and print it in the format "! y". You will be able to read $*h*$ for a next testcase only after printing the answer in a previous testcase and flushing the output.

翻译中…

Each tree is fixed from the beginning and it doesn't change during your questions.

翻译中…

Input

翻译中…

The first line of the input contains a single integer $*t*$ ($1 ≤ *t* ≤ 500$) — the number of testcases.

翻译中…

At the beginning of each testcase you should read from the input a single integer $*h*$ ($2 ≤ *h* ≤ 7$) — the height of the tree. You can't read the value of $*h*$ in a next testcase until you answer a previous testcase.

翻译中…

Interaction

翻译中…

To ask a question about neighbours of vertex $*x*$, print "? x" (without quotes) on a separate line. Note, you must print an end-of-line character after the last character of the line and flush your output to get a response.

翻译中…

The response will consist of two lines. The first line will contain a single integer $*k*$ ($1 ≤ *k* ≤ 3$) — the number of neighbours of vertex $*x*$. The second line will contain $*k*$ distinct integers $*t*_{1}, ..., *t*_{*k*}$ ($1 ≤ *t*_{1} < ... < *t*_{*k*} ≤ 2^{*h*} - 1$) — indices of neighbours of vertex $*x*$, gives in the increasing order.

翻译中…

After asking at most $16$ questions you have to say $*y*$ — the index of the root. Print "! y" (without quotes) and an end-of-line character, and flush the output.

翻译中…

Each tree is fixed from the beginning and it doesn't change during your questions.

翻译中…

You can get Idleness Limit Exceeded if you don't print anything or if you forget to flush the output.

翻译中…

To flush you can use (just printing a query/answer and end-of-line):

翻译中…
  • fflush(stdout) in C++;
  • System.out.flush() in Java;
  • stdout.flush() in Python;
  • flush(output) in Pascal;
  • See the documentation for other languages.
翻译中…

In any moment if the program reads $*h* = 0$ or $*k* = 0$ it should immediately terminate normally (for example, calling exit(0)). It means that the system detected incorrect request/output from your program and printed 0 because if can't process your requests anymore. In this case you'll receive verdict "Wrong Answer", but if you ignore case $*h* = 0$ or $*k* = 0$ it could lead to "Runtime Error", "Time/Memory limit exceeded" or any other verdict because your program could read a trash from the closed input stream.

翻译中…

Hacking. To hack someone, use the following format:

翻译中…

The first line should contain a single integer $*t*$ equal to $1$ (only one testcase is allowed in hacks). The second line should contain a single integer $*h*$. Each of next $2^{*h*} - 2$ lines should contain two distinct integers $*a*_{*i*}$ and $*b*_{*i*}$ ($1 ≤ *a*_{*i*}, *b*_{*i*} ≤ 2^{*h*} - 1$), denoting two nodes connected with an edge. The printed edges must form a perfect binary tree of height $*h*$.

翻译中…

Of course, contestant programs will not be able to see this input.

翻译中…

Note

翻译中…

In the first sample, a tree corresponds to the drawing from the statement.

翻译中…

In the second sample, there are two two testcases. A tree in the first testcase has height $2$ and thus $3$ vertices. A tree in the second testcase has height $4$ and thus $15$ vertices. You can see both trees on the drawing below.

翻译中…

image

翻译中…

样例

Input #1
1
3
3
4 5 7
2
1 2
1
2
Output #1
? 1
? 5
? 6
! 5
InputCopy OutputCopy
Input #2
2
2
1
3
2
1 2
2
1 2
4
3
3 12 13
Output #2
? 1
? 3
? 3
! 3
? 6
! 1
InputCopy OutputCopy
题目信息
题号
750F
所属比赛
时间限制
2 s
内存限制
256 MB
标签
构造
模拟
交互题
树

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。