{"raw_statement":[{"iden":"statement","content":"有一个值域 $[1,n]$ 的未知排列 $P$。你每次可以询问一个排列 $R$。交互库会返回满足在排列 $P$ 中 $i$ 出现在 $j$ 前面，在排列 $R$ 中 $i$ 出现在 $j$ 后面的有序对 $(i,j)$ 的数量。你需要猜出排列 $P$。\n\n### 实现细节\n\n你无需在程序开头引用头文件 `art.h`，你只需要在代码开头加入以下代码。\n\n```cpp\n#include <vector>\nvoid answer(std::vector<int>);\nint publish(std::vector<int>);\n```\n\n你需要实现一个函数 `void solve(int N)`，这个函数可以调用如下函数：\n\n- `int publish(std::vector<int> R)`\n    - 该函数可以向交互库询问排列 $R$，$R$ 应当是一个值域 $[1,n]$ 的排列。\n    - 该函数至多能被调用 $4000$ 次。\n- `void answer(std::vector<int> R)`\n    - 该函数向交互库提交答案，表示你猜测的排列。\n    - 你必须恰好调用该函数一次。"},{"iden":"input","content":"样例交互库从标准输入流读入以下数据：\n\n第一行，一个整数 $n$。\n\n第二行，$n$ 个整数，第 $i$ 个数表示 $P_i$。\n\n如果输入不符格式，则直接判为 `Invalid input!`。"},{"iden":"output","content":"样例交互库向标准输入流输出以下数据：\n\n在你每一次调用 `public` 函数后，交互库都会输出一行，表示你的交互内容。\n\n在你调用 `answer` 函数，交互库会输出两行。\n\n第一行，$n$ 个整数，表示你回答的排列。\n\n第二行会输出交互库的判决。若回答正确会返回 `Correct: x published ranking(s).`，其中 $x$ 是你的交互次数。否则返回 `Wrong answer!`。"},{"iden":"note","content":"### 样例交互\n\n考虑排列 $P$ 是 $\\{1,3,2\\}$。\n\n样例中进行的交互如下：\n\n|         调用         | 返回值 |               解释               |\n| :------------------: | :----: | :------------------------------: |\n| `publish({1, 2, 3})` |   1    |       合法有序对为 $(3,2)$       |\n| `publish({2, 3, 1})` |   3    | 合法有序对为 $(1,3),(1,2),(3,2)$ |\n| `answer({1, 3, 2})`  |        |        回答与正确答案相符        |\n\n### 数据范围与提示\n\n- 子任务 $1$ ($5$ 分)：$N \\leq 6$\n- 子任务 $2$ ($15$ 分)：$N \\leq 40$\n- 子任务 $3$ ($15$ 分)：$N \\leq 250$\n- 子任务 $4$ ($15$ 分)：$N \\leq 444$\n- 子任务 $5$ ($20$ 分)：$N \\leq 2000$\n- 子任务 $6$ ($30$ 分)：没有特殊限制\n\n对于所有数据，满足 $2\\leq N \\leq 4000$"}],"translated_statement":null,"sample_group":[],"show_order":[],"formal_statement":null,"simple_statement":null,"has_page_source":false}