Universal Cup Judging System

Universal Cup

Time Limit: 1 s Memory Limit: 1024 MB
Statistics

Бұл — интерактивті есеп.

VegiCat әрбір элементі $0$, $1$ немесе $2$ болатын $a_1, a_2, \ldots, a_n$ массивін біледі. Ол массив мәндерін сізге тікелей айтқысы келмейді, бірақ оған сұрақтар қоюға болады. Әр сұранымда сіз екі $i$ және $j$ индекстерін таңдайсыз, ал VegiCat сізге $a_i > a_j$ шартының орындалатынын не орындалмайтынын айтады.

VegiCat сізден индекстерді сәйкес массив мәндерінің кемімеу ретімен шығаруды сұрайды. Яғни, келесі шартты қанағаттандыратын $1, 2, \ldots, n$ сандарының $p_1, p_2, \ldots, p_n$ орын алмастыруын табыңыз:

$$a_{p_1} \le a_{p_2} \le \cdots \le a_{p_n}.$$

problem_23599_9dab41a0c2d5e6c302cb4f2ad9a16799.png

Әрбір тестте ең көбі $2n - 3$ сұраным жасай аласыз.

Интерактор бейімделгіш (adaptive). Бұл массивтің алдын ала бекітілмегенін білдіреді. Интерактор осы уақытқа дейін берілген барлық жауаптарға сәйкес келетін, элементтері $\{0, 1, 2\}$ жиынынан тұратын кемінде бір массив әрқашан табылатынына кепілдік береді. Сіздің соңғы орын алмастыруыңыз барлық жауаптарға сәйкес келетін әрбір массив үшін дұрыс болуы керек.

Кіріс деректер

Бірінші жолда тесттер санын білдіретін бір бүтін сан $T$ ($1 \le T \le 250$) берілген. Одан кейін тесттердің сипаттамасы беріледі.

Әрбір тест массивтің ұзындығын білдіретін бір бүтін сан $n$-нен ($2 \le n \le 500$) басталады.

Барлық тесттер бойынша $n$ мәндерінің қосындысы $500$-ден аспайды.

Өзара әрекеттесу

Сұраным жасау үшін келесі форматта бір жол шығарыңыз:

? i j

Мұнда $1 \le i, j \le n$. Әр сұранымнан кейін бір бүтін санды оқыңыз:

  • егер $a_i > a_j$ болса, $1$;
  • егер $a_i \le a_j$ болса, $0$.

$i = j$ болатын сұранымдарға және қайталанатын сұранымдарға рұқсат етіледі және олар сұранымдар санына есептеледі.

Ретті анықтаған соң, келесі форматта бір жол шығарыңыз:

! p_1 p_2 ... p_n

$1$-ден $n$-ге дейінгі әрбір индекс дәл бір рет кездесуі керек. Жауапты шығару сұраным ретінде есептелмейді.

Егер жауабыңыз дұрыс болса, келесі тесттің $n$ мәнін оқып, соған өтіңіз, немесе бұл соңғы тест болса, программаны аяқтаңыз. Интерактор жауаптан кейін бөлек растау хабарламасын жібермейді.

Әрбір сұранымды немесе жауапты шығарғаннан кейін жаңа жол белгісін шығарып, шығыс буферін тазалаңыз (flush). Шығысты тазалау үшін мыналарды қолдануға болады:

  • C/C++ тілдерінде fflush(stdout) немесе cout.flush();
  • Java және Kotlin тілдерінде System.out.flush();
  • Python тілінде sys.stdout.flush().

Егер сіз жарамсыз сұраным жасасаңыз, сұранымдар шегінен асып кетсеңіз немесе қате жауап шығарсаңыз, Wrong Answer вердиктін аласыз. Көрсетілген форматқа сәйкес келмейтін шығыс та Wrong Answer деп бағаланады. Бұл жағдайларда интерактор қате туралы жауап жіберместен жұмысын тоқтатады.

Examples

Input 1

2
3

1

1

2

0

Output 1


? 1 2

? 2 3

! 3 2 1

? 1 2

! 1 2

Note

Бірінші тестте ? 1 2 және ? 2 3 сұранымдарының екеуі де $1$ қайтарады, сондықтан $a_1 > a_2 > a_3$. Демек, $(3, 2, 1)$ — дұрыс жауап.

Екінші тестте ? 1 2 сұранымы $0$ қайтарады, сондықтан $a_1 \le a_2$. Демек, $(1, 2)$ — дұрыс жауап.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.