有 N 个元素,编号 1,2,…,N,每一对元素之间的大小关系是确定的,关系具有反对称性,但不具有传递性。
注意:不存在两个元素大小相等的情况。
也就是说,元素的大小关系是 N 个点与 2N×(N−1) 条有向边构成的任意有向图。
然而,这是一道交互式试题,这些关系不能一次性得知,你必须通过不超过 10000 次提问来获取信息,每次提问只能了解某两个元素之间的关系。
现在请你把这 N 个元素排成一行,使得每个元素都小于右边与它相邻的元素。
你可以通过我们预设的 bool 函数 compare 来获得两个元素之间的大小关系。
例如,编号为 a 和 b 的两个元素,如果元素 a 小于元素 b,则 compare(a,b) 返回 true,否则返回 false。
将 N 个元素排好序后,把他们的编号以数组的形式输出,如果答案不唯一,则输出任意一个均可。
为了适配 OJ,本题交互格式进行修改。改为 I/O 交互。
cpp1bool compare(int a, int b) 2{ 3 cout << "? " << a << ' ' << b << endl; 4 bool t; 5 cin >> t; 6 return t; 7}
请在代码里填写此函数。擅自修改内容后果自负。
交互库会先给出一个正整数 N 表示元素数量。
之后的每次回答,交互库会返回 1 或 0 表示大小关系。1 代表 true,0 代表 false。
你可以使用题面中的 compare 函数进行提问。如要自己编写询问,询问格式为 ? a b。
输出答案之前请先给出一个感叹号 !。之后用空格分割这 n 个编号。具体见样例 #1.
3 1 0 0
? 1 2 ? 1 3 ? 2 3 ! 3 1 2
测试数据满足 1≤N≤1000。