상금 w_i와 계속 확률 p_i를 가진 n개의 티켓을 골라, 받는 상금 합의 기댓값이 최대가 되도록 순서를 정하고 그중 사전순으로 가장 앞선 순열을 출력한다.
몰로코는 매달 말에 직원 복지를 걸고 간단한 복권 추첨을 한다.
당신은 복권 nnn장을 받았고, iii번 복권의 상금은 빗코인 wiw_iwi개다 (wi>0w_i > 0wi>0).
복권마다 동전이 하나씩 짝지어져 있다. iii번 복권의 동전은 확률 pip_ipi로 앞면이, 확률 1−pi1 - p_i1−pi로 뒷면이 나온다 (0<pi<10 < p_i < 10<pi<1). 동전 던지기는 모두 독립이다.
각 단계에서 아직 고르지 않은 복권 하나를 골라 상금을 즉시 받는다. 그다음 그 복권에 짝지어진 동전을 던진다. 앞면이 나오면 추첨이 이어져 복권을 하나 더 고르고, 복권이 다 떨어질 때까지 같은 과정을 반복한다. 뒷면이 나오면 추첨은 그 자리에서 끝나고 그때까지 모은 빗코인을 전부 가진다.
모든 wiw_iwi와 pip_ipi를 알고 있다. 받는 빗코인의 기댓값을 최대로 만드는 복권 선택 순서를 구하라.
첫째 줄에 정수 nnn이 주어진다 (1≤n≤10001 \le n \le 10001≤n≤1000).
다음 nnn개 줄에 두 정수 wiw_iwi와 qiq_iqi가 주어진다 (1≤wi≤100001 \le w_i \le 100001≤wi≤10000, 0<qi<100000 < q_i < 100000<qi<10000). 확률은 pi=qi/10000p_i = q_i / 10000pi=qi/10000으로 정의한다.
복권을 고르는 순서를 나타내는 순열을 한 줄에 출력한다. 순열은 111부터 nnn까지의 정수로 이루어진 길이 nnn의 수열이며, 수는 공백으로 구분한다.
기댓값을 최대로 만드는 순열이 여럿이면 사전순으로 가장 앞서는 것을 출력한다. 즉 앞쪽 자리일수록 작은 번호가 오도록 한다.
순서 π\piπ로 복권을 고를 때 받는 빗코인의 기댓값은 다음과 같다.
∑k=1nwπk∏j<kpπj\sum_{k=1}^{n} w_{\pi_k} \prod_{j < k} p_{\pi_j}∑k=1nwπk∏j<kpπj
첫 번째 예제에서 순서 (1,2,3)(1, 2, 3)(1,2,3)의 기댓값은 2+0.3×5+0.15×7=4.552 + 0.3 \times 5 + 0.15 \times 7 = 4.552+0.3×5+0.15×7=4.55다. 기댓값을 최대로 만드는 순서는 (2,3,1)(2, 3, 1)(2,3,1)이고 그 값은 8.78.78.7이다.
세 번째 예제에서는 순서 (2,3,1)(2, 3, 1)(2,3,1)과 (3,2,1)(3, 2, 1)(3,2,1)의 기댓값이 같지만 (2,3,1)(2, 3, 1)(2,3,1)이 사전순으로 앞선다.