퍼펙트 게임

죽으면 첫 레벨부터 다시 시작할 때 전체 클리어까지 걸리는 기대 시간이 최소가 되는 레벨 순서를 구합니다.

보통7그리디정렬확률아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

비디오 게임에서 모든 레벨을 한 번도 죽지 않고 연달아 깨면 업적을 얻는다. 레벨은 원하는 순서로 배치할 수 있고, 한 레벨을 시도하면 그 레벨을 깨거나 죽는다. 레벨마다 죽을 확률과 한 번 시도하는 데 걸리는 시간이 정해져 있다.

레벨을 깨는 데 걸리는 시간과 죽는 데 걸리는 시간은 같다. 죽으면 곧바로 자신이 정한 순서의 첫 레벨부터 다시 시작한다.

업적을 얻을 때까지 걸리는 시간의 기댓값이 가장 작아지는 레벨 순서를 구하라.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 이어서 각 테스트 케이스가 세 줄씩 주어진다.

각 테스트 케이스의 첫 줄에는 레벨의 수 NN이 주어진다. 둘째 줄에는 NN개의 정수 LiL_i가 공백으로 구분되어 주어진다. LiL_i는 레벨 ii를 한 번 시도하는 데 걸리는 시간(초)이며, 깨든 죽든 같다. 셋째 줄에는 NN개의 정수 PiP_i가 공백으로 구분되어 주어진다. PiP_i는 레벨 ii를 한 번 시도할 때 죽을 확률을 백분율로 나타낸 값이다.

레벨 번호는 00부터 N1N-1까지다.

제한

  • 1T1001 \le T \le 100
  • 1N10001 \le N \le 1000
  • 1Li1001 \le L_i \le 100
  • 0Pi<1000 \le P_i < 100

출력

각 테스트 케이스마다 한 줄에 Case #x: 를 출력하고, 이어서 NN개의 정수를 공백으로 구분해 출력한다. xx11부터 시작하는 테스트 케이스 번호다.

jj번째 정수는 jj번째로 시도할 레벨의 번호여야 한다. 즉 출력하는 수열은 00부터 N1N-1까지의 순열이고, 그 순서로 레벨을 시도했을 때 업적을 얻기까지 걸리는 시간의 기댓값이 최소여야 한다.

기댓값이 최소인 순서가 여러 개면 그중 사전순으로 가장 앞서는 것을 출력한다. 두 순서 중에서는 처음으로 달라지는 자리의 수가 더 작은 쪽이 사전순으로 앞선다.