몰로코 빗코인 복권 (쉬운 버전)

상금 w_i와 계속 확률 p_i를 가진 n개의 티켓을 골라, 받는 상금 합의 기댓값이 최대가 되도록 순서를 정하고 그중 사전순으로 가장 앞선 순열을 출력한다.

보통6그리디정렬수학확률면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

몰로코는 매달 말에 직원 복지를 걸고 간단한 복권 추첨을 한다.

당신은 복권 nn장을 받았고, ii번 복권의 상금은 빗코인 wiw_i개다 (wi>0w_i > 0).

복권마다 동전이 하나씩 짝지어져 있다. ii번 복권의 동전은 확률 pip_i로 앞면이, 확률 1pi1 - p_i로 뒷면이 나온다 (0<pi<10 < p_i < 1). 동전 던지기는 모두 독립이다.

각 단계에서 아직 고르지 않은 복권 하나를 골라 상금을 즉시 받는다. 그다음 그 복권에 짝지어진 동전을 던진다. 앞면이 나오면 추첨이 이어져 복권을 하나 더 고르고, 복권이 다 떨어질 때까지 같은 과정을 반복한다. 뒷면이 나오면 추첨은 그 자리에서 끝나고 그때까지 모은 빗코인을 전부 가진다.

모든 wiw_ipip_i를 알고 있다. 받는 빗코인의 기댓값을 최대로 만드는 복권 선택 순서를 구하라.

입력

첫째 줄에 정수 nn이 주어진다 (1n10001 \le n \le 1000).

다음 nn개 줄에 두 정수 wiw_iqiq_i가 주어진다 (1wi100001 \le w_i \le 10000, 0<qi<100000 < q_i < 10000). 확률은 pi=qi/10000p_i = q_i / 10000으로 정의한다.

출력

복권을 고르는 순서를 나타내는 순열을 한 줄에 출력한다. 순열은 11부터 nn까지의 정수로 이루어진 길이 nn의 수열이며, 수는 공백으로 구분한다.

기댓값을 최대로 만드는 순열이 여럿이면 사전순으로 가장 앞서는 것을 출력한다. 즉 앞쪽 자리일수록 작은 번호가 오도록 한다.

노트

순서 π\pi로 복권을 고를 때 받는 빗코인의 기댓값은 다음과 같다.

k=1nwπkj<kpπj\sum_{k=1}^{n} w_{\pi_k} \prod_{j < k} p_{\pi_j}

첫 번째 예제에서 순서 (1,2,3)(1, 2, 3)의 기댓값은 2+0.3×5+0.15×7=4.552 + 0.3 \times 5 + 0.15 \times 7 = 4.55다. 기댓값을 최대로 만드는 순서는 (2,3,1)(2, 3, 1)이고 그 값은 8.78.7이다.

세 번째 예제에서는 순서 (2,3,1)(2, 3, 1)(3,2,1)(3, 2, 1)의 기댓값이 같지만 (2,3,1)(2, 3, 1)이 사전순으로 앞선다.