CF1815B Sum Graph
Description
This is an interactive problem.
There is a hidden permutation $ p_1, p_2, \dots, p_n $ .
Consider an undirected graph with $ n $ nodes only with no edges. You can make two types of queries:
1. Specify an integer $ x $ satisfying $ 2 \le x \le 2n $ . For all integers $ i $ ( $ 1 \le i \le n $ ) such that $ 1 \le x-i \le n $ , an edge between node $ i $ and node $ x-i $ will be added.
2. Query the number of edges in the shortest path between node $ p_i $ and node $ p_j $ . As the answer to this question you will get the number of edges in the shortest path if such a path exists, or $ -1 $ if there is no such path.
Note that you can make both types of queries in any order.
Within $ 2n $ queries (including type $ 1 $ and type $ 2 $ ), guess two possible permutations, at least one of which is $ p_1, p_2, \dots, p_n $ . You get accepted if at least one of the permutations is correct. You are allowed to guess the same permutation twice.
A permutation of length $ n $ is an array consisting of $ n $ distinct integers from $ 1 $ to $ n $ in arbitrary order. For example, $ [2,3,1,5,4] $ is a permutation, but $ [1,2,2] $ is not a permutation ( $ 2 $ appears twice in the array), and $ [1,3,4] $ is also not a permutation ( $ n=3 $ but there is $ 4 $ in the array).
Input Format
Each test contains multiple test cases. The first line contains a single integer $ t $ ( $ 1 \le t \le 100 $ ) — the number of test cases.
The first line of each test case contains a single integer $ n $ ( $ 2 \le n \le 10^3 $ ) — the length of the permutation.
It is guaranteed that the sum of $ n $ over all test cases does not exceed $ 10^3 $ .
Output Format
The interaction for each test case begins by reading the integer $ n $ .
Then, make at most $ 2n $ queries:
- If you want to make a type $ 1 $ query, output "+ x". $ x $ must be an integer between $ 2 $ and $ 2n $ inclusive. After doing that read $ 1 $ or $ -2 $ . If you read $ 1 $ your query was valid, otherwise it was invalid or you exceed the limit of queries, and your program must terminate immediately to receive a Wrong Answer verdict.
- If you want to make a type $ 2 $ query, output "? i j". $ i $ and $ j $ must be integers between $ 1 $ and $ n $ inclusive. After that, read in a single integer $ r $ ( $ -1 \le r \le n $ ) — the answer to your query. If you receive the integer $ −2 $ instead of an answer, it means your program has made an invalid query, or has exceeded the limit of queries. Your program must terminate immediately to receive a Wrong Answer verdict.
At any point of the interaction, if you want to guess two permutations, output "! $ p_{1,1} $ $ p_{1,2} $ $ \dots $ $ p_{1,n} $ $ p_{2,1} $ $ p_{2,2} $ $ \dots $ $ p_{2,n} $ ". Note that you should output the two permutations on the same line, and no exclamation mark is needed to separate the two permutations. After doing that read $ 1 $ or $ -2 $ . If you read $ 1 $ your answer was correct, otherwise it was incorrect and your program must terminate immediately to receive a Wrong Answer verdict. After that, move on to the next test case, or terminate the program if there are none. Note that reporting the answer does not count as a query.
Note that even if you output a correct permutation, the second permutation should be a permutation and not an arbitrary array.
At any point, if you continue interaction after reading in the integer $ -2 $ , you can get an arbitrary verdict because your solution will continue to read from a closed stream.
After printing a query or the answer do not forget to output the end of line and flush the output. Otherwise, you will get Idleness limit exceeded. To do this, use:
- fflush(stdout) or cout.flush() in C++;
- System.out.flush() in Java;
- flush(output) in Pascal;
- stdout.flush() in Python;
- see the documentation for other languages.
Interactor is non-adaptive. This means that all permutations are fixed before the interaction starts.
Hacks
To make a hack, use the following format.
The first line should contain a single integer $ t $ ( $ 1 \le t \le 100 $ ) — the number of test cases.
The first line of each test case should contain a single integer $ n $ ( $ 2 \le n \le 10^3 $ ) — the length of the permutation.
The second line of each test case should contain $ n $ distinct integers $ p_1, p_2, \ldots, p_n $ ( $ 1 \le p_i \le n $ ) — the hidden permutation.
The sum of $ n $ over all test cases should not exceed $ 10^3 $ .
Explanation/Hint
In the first test case, $ n=6 $ and the hidden permutation $ p = [1,4,2,5,3,6] $ .
Firstly, make a type $ 1 $ query on $ x=12, 2, 3 $ respectively. This adds four edges to the graph in total:
- An edge that connects node $ 6 $ and node $ 6 $ .
- An edge that connects node $ 1 $ and node $ 1 $ .
- An edge that connects node $ 1 $ and node $ 2 $ .
- An edge that connects node $ 2 $ and node $ 1 $ .
Since all of these queries are valid, the interactor returns $ 1 $ after each of them.
Then, query the number of edges in the shortest path between node $ p_1 = 1 $ and $ p_3 = 2 $ , which is equal to $ 1 $ .
Then, make a type $ 1 $ query on $ x=5 $ . This adds four edges to the graph in total:
- An edge that connects node $ 1 $ and node $ 4 $ .
- An edge that connects node $ 2 $ and node $ 3 $ .
- An edge that connects node $ 3 $ and node $ 2 $ .
- An edge that connects node $ 4 $ and node $ 1 $ .
Since this query is valid, the interactor returns $ 1 $ .
Then, query the number of edges in the shortest path between node $ p_1 = 1 $ and $ p_5 = 3 $ , which is equal to $ 2 $ .
Then, query the number of edges in the shortest path between node $ p_4 = 5 $ and $ p_5 = 3 $ . Such a path doesn't exist, therefore the interactor returns $ -1 $ .
Afterwards, due to some magic, two possible permutations that can be $ p $ are determined: the first permutation is $ [1,4,2,5,3,6] $ and the second permutation is $ [1,2,3,4,5,6] $ . Since the first permutation is equal to the hidden permutation, this test case is solved correctly. In total, $ 7 $ queries are used, which is within the limit of $ 2 \cdot 6 = 12 $ queries.
Since the answer is correct, the interactor returns $ 1 $ .
In the second test case, $ n=2 $ and the hidden permutation is $ p = [2,1] $ .
Since there are only $ 2! = 2 $ possible permutations, no queries are needed. It is sufficient to just output the two permutations, $ [1,2] $ and $ [2,1] $ . In total, $ 0 $ queries are used, which is within the limit of $ 2 \cdot 2 = 4 $ queries.
Since the answer is correct, the interactor returns $ 1 $ .