에르되시와 세케레시 수열 복원

각 위치의 증가 부분 수열 길이와 감소 부분 수열 길이가 주어지면 이를 만족하는 1부터 N까지 순열 중 사전 순으로 가장 작은 순열을 복원합니다.

보통7백트래킹그리디동적 계획법아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

XX11부터 NN까지의 수를 한 번씩 나열한 수열이다. XX에서 앞뒤 순서를 지키며 몇 개를 골랐을 때 값이 계속 커지면 증가 부분수열, 계속 작아지면 감소 부분수열이라고 한다. 예를 들어 (5,7,8)(5, 7, 8)(4,5,3,7,6,2,8,1)(4, 5, 3, 7, 6, 2, 8, 1)의 증가 부분수열이다.

폴 에르되시와 세케레시 죄르지는 길이가 N\sqrt{N} 이상인 증가 부분수열과 길이가 N\sqrt{N} 이상인 감소 부분수열 중 적어도 하나가 XX에 반드시 있다는 것을 증명했다. 위 수열에는 길이가 4인 감소 부분수열 (5,3,2,1)(5, 3, 2, 1)이 있다.

ii마다 두 값을 정의한다.

  • AiA_iXiX_i가 가장 큰 수인 증가 부분수열의 최대 길이다.
  • BiB_iXiX_i가 가장 큰 수인 감소 부분수열의 최대 길이다.

증가 부분수열에서 가장 큰 수는 마지막 원소이므로 AiA_iXiX_i에서 끝나는 증가 부분수열의 최대 길이와 같다. 감소 부분수열에서 가장 큰 수는 첫 원소이므로 BiB_iXiX_i에서 시작하는 감소 부분수열의 최대 길이와 같다.

X=(4,5,3,7,6,2,8,1)X = (4, 5, 3, 7, 6, 2, 8, 1)의 값은 다음과 같다.

iiXiX_iAiA_iBiB_i
0414
1524
2313
3734
4633
5212
6842
7111

순서쌍 (Ai,Bi)(A_i, B_i)는 모든 ii에서 서로 다르고, 여기서 어떤 iiAiA_iBiB_iN\sqrt{N} 이상이라는 결론이 나온다.

AABB가 주어질 때 XX를 복원하라. XX11부터 NN까지의 수를 한 번씩 쓴 수열이어야 하고, 가능한 XX가 여럿이면 사전순으로 가장 앞서는 것을 출력한다. 즉 X0X_0을 가능한 한 작게 하고, 그래도 여러 개가 남으면 X1X_1을 가능한 한 작게 하는 식으로 정한다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 세 줄로 이루어진다.

첫 줄에 정수 NN이 주어진다. 둘째 줄에 A0,A1,,AN1A_0, A_1, \ldots, A_{N-1}이 공백으로 구분되어 주어진다. 셋째 줄에 B0,B1,,BN1B_0, B_1, \ldots, B_{N-1}이 공백으로 구분되어 주어진다.

제한

  • 1T301 \le T \le 30
  • 1N201 \le N \le 20
  • AiA_iBiB_i는 양의 정수이다.
  • 조건을 만족하는 XX가 적어도 하나 존재한다.

출력

각 테스트 케이스마다 한 줄에 Case #x: 를 출력하고, 이어서 X0,X1,,XN1X_0, X_1, \ldots, X_{N-1}을 공백으로 구분해 출력한다. xx는 1부터 시작하는 테스트 케이스 번호다.