CF1854D Michael and Hotel

Description

Michael and Brian are stuck in a hotel with $ n $ rooms, numbered from $ 1 $ to $ n $ , and need to find each other. But this hotel's doors are all locked and the only way of getting around is by using the teleporters in each room. Room $ i $ has a teleporter that will take you to room $ a_i $ (it might be that $ a_i = i $ ). But they don't know the values of $ a_1,a_2, \dots, a_n $ . Instead, they can call up the front desk to ask queries. In one query, they give a room $ u $ , a positive integer $ k $ , and a set of rooms $ S $ . The hotel concierge answers whether a person starting in room $ u $ , and using the teleporters $ k $ times, ends up in a room in $ S $ . Brian is in room $ 1 $ . Michael wants to know the set $ A $ of rooms so that if he starts in one of those rooms they can use the teleporters to meet up. He can ask at most $ 2000 $ queries. The values $ a_1, a_2, \dots, a_n $ are fixed before the start of the interaction and do not depend on your queries. In other words, the interactor is not adaptive.

Input Format

The input contains a single integer $ n $ ( $ 2 \leq n \leq 500 $ ).

Output Format

To ask a query, print a line in the format "? u k |S| S\_1 S\_2 ... S\_|S|" with $ 1 \leq u, S_1, \ldots, S_{|S|} \leq n $ , all the $ S_i $ distinct, and $ 1 \leq k \leq 10^9 $ . As a response to the query you will get "1" if the answer is yes, and "0" if the answer is no. To output an answer, you should print "! |A| A\_1 A\_2 ... A\_|A|" with $ 1 \leq A_1, \ldots, A_{|A|} \leq n $ all distinct. Printing the answer doesn't count as a query. See the interaction example for more clarity. If you ask too many queries or you ask a malformed query, you will get Wrong answer. After printing a query 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. Hack format For the hacks use the following format. The first line should contain $ n $ — the number of rooms. The second line should contains $ n $ integers $ a_1, a_2, \dots, a_n $ — the teleporter in room $ i $ leads to room $ a_i $ .

Explanation/Hint

In the sample test, there are $ n=5 $ rooms and the (hidden) array describing the behavior of the teleporters is $ [1, 2, 1, 3, 2] $ . - The first query asks whether starting from room number $ a=3 $ , and using the teleporters $ 5 $ times, one ends up in one of the two rooms $ S=\{2, 3\} $ . This action results in ending up in the room $ 1 $ , so the answer is $ 0 $ . - The second query asks whether starting from room number $ a=2 $ , and using the teleporters $ 5 $ times, one ends up in one of the two rooms $ S=\{2, 3\} $ . This action results in ending up in the room $ 2 $ , so the answer is $ 1 $ .