Universal Cup Judging System

Universal Cup

시간 제한: 3.0 s 메모리 제한: 1024 MB 총점: 100 난이도: [표시] 인터랙티브 해킹 가능 ✓
통계

수고했어, 자기야. Little Cyan Fish는 자신의 암호가 얼마나 전달될지 모르겠지만, 그래도 여기까지 Little Cyan Fish와 함께 걸어와 준 것에 감사하고 있어. 너무나 많은 일들, 너무나 부조리한 일들이 일어났고, Little Cyan Fish는 지쳤어, 정말 많이 지쳤어... 지난 한 해 동안 Little Cyan Fish는 몇 번이나 스스로를 구원하려 한다고 느꼈지만, 결국 몸에 묶인 실을 끊어낼 만큼 강하지 못했어. Little Cyan Fish는 늘 저 머나먼 곳에 자신의 삶이라는 지도를 또렷이 내려다볼 수 있는 또 다른 자신이 있다고 상상하곤 해.

— "저 너머를 향한 동경" · 제10회 중국 대학생 프로그래밍 경시대회 결승전

이 문제는 인터랙티브 문제입니다.

자, 어쩌면 당신이 이것이 얼마나 어려울지 시도해 볼 수 있을 것입니다. Little Cyan Fish는 자신의 삶이 형태를 알 수 없는 순열이라고 느낍니다. 사람들은 늘 세상이 무작위성으로 가득 차 있다고 말하지만, 왜 Little Cyan Fish는 늘 이렇게 운이 없을까요...? 아하! 어쩌면 무작위성이란 원래 이렇게 심오한 것일지도 모릅니다! 그래서 Little Cyan Fish는 자신의 이 순열을 다음과 같은 방식으로 무작위 생성하기로 결정했습니다:

  • 무작위 순열 $p_1, p_2, \dots, p_n$을 생성합니다: $1$부터 $n$까지의 가능한 모든 $n!$가지 순열 중에서 균등한 확률로 무작위 선택합니다.
  • 만약 $p_1 > p_n$이면, 순열 전체를 뒤집습니다.

당신은 순열의 구조를 직접 관찰할 수 없지만, Little Cyan Fish는 당신에게 초능력을 부여했습니다: 바로 질문하기입니다! 매번 당신은 순열에서 두 수 사이의 거리를 $3$으로 나눈 나머지를 인터랙티브하게 질문할 수 있습니다. 구체적으로, 매번 두 수 $u, v$($1 \le u, v \le n$, $u \ne v$)를 선택하면, 순열은 이 두 수 사이의 거리를 $3$으로 나눈 나머지를 알려줍니다(즉, $p_i = u, p_j = v$를 만족하는 두 인덱스 $i, j$를 찾아 $|i - j| \bmod 3$을 답해줍니다).

이제 Little Cyan Fish는 당신이 무엇을 얻어낼 수 있는지 시도해 보기를 원합니다. 당신은 $25n$번 이하의 질문으로 이 순열을 알아내어 Little Cyan Fish를 도와야 합니다.

입력

여러 개의 테스트 케이스가 주어집니다. 입력의 첫 번째 줄에는 테스트 케이스의 개수를 나타내는 하나의 정수 $T$($1 \le T \le 1000$)가 주어집니다.

각 테스트 케이스에 대해, 먼저 정수 $n$($3 \le n \le 10^4$)을 읽어야 합니다.

인터랙션 프로토콜

그다음 인터랙션이 시작됩니다. 각 테스트 케이스에서 최대 $25n$번의 질문을 할 수 있습니다. 질문을 하려면 질문을 나타내는 한 줄 ? u v($1 \le u, v \le n$, $u \ne v$)를 출력해야 합니다. 그런 다음 표준 입력으로부터 결과를 읽어야 합니다.

답을 제출하려면 ! p1 p2 ... pn을 출력해야 합니다. 당신의 출력은 반드시 $p_1 < p_n$을 만족해야 합니다. 답을 출력하는 것은 $25n$번의 질문 제한에 포함되지 않습니다. 답을 출력한 후에는 즉시 다음 테스트 케이스를 읽거나 즉시 프로그램을 종료해야 합니다.

질문을 출력한 후에는 줄바꿈 문자를 출력하고 출력 스트림을 플러시(flush)하는 것을 잊지 마세요. 이를 위해 C++에서는 fflush(stdout) 또는 cout.flush(), Java에서는 System.out.flush(), Pascal에서는 flush(output), Python에서는 stdout.flush()를 사용할 수 있습니다.

모든 테스트 케이스에서 $n$의 합은 $10^4$을 초과하지 않음이 보장됩니다.

이 문제에서 인터랙터는 비적응적(non-adaptive)임이 보장됩니다. 즉, 순열들은 인터랙션 과정이 시작되기 전에 문제에 설명된 대로 무작위로 결정되며, 당신의 질문에 따라 바뀌지 않습니다. (예제 테스트 케이스를 포함하여) 총 $30$개의 테스트 케이스가 있습니다.

예제

예제 입력 1

2
3
2
1
1
4
1
1
1
0
2

예제 출력 1

? 1 2
? 2 3
? 1 3
! 1 3 2
? 2 3
? 3 1
? 1 4
? 2 4
? 2 1
! 2 3 1 4

노트

problem_18002_1.png

그림 1: 2026년 3월 4일 <?>에서 촬영된 Little Cyan Fish와 <?>

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.