작업 스케줄링

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

11번부터 nn번까지 번호가 매겨진, 서로 독립적이며 나눌 수 없는 작업 nn개가 있다. 이 작업들은 중간에 쉬는 시간 없이 어떤 순서로든 하나씩 차례대로 실행되며, 시작 시각은 t=0t = 0이다. 작업을 늦게 시작할수록 실행 시간이 길어진다. 즉, 작업 ii를 시각 tt에 시작하면 실행에 hi(t)=ait+bih_i(t) = a_i t + b_i의 시간이 걸리며, 여기서 0ai10 \le a_i \le 1, 0bi10 \le b_i \le 1이다. 따라서 각 작업은 시각을 tt에서 t+hi(t)=(1+ai)t+bit + h_i(t) = (1 + a_i)\,t + b_i로 진행시킨다.

전체 실행 시간은 마지막 작업이 끝나는 시각이다. 이 전체 실행 시간이 최소가 되도록 작업 순서를 정하는 것이 목표이다.

nn과 각 작업의 계수 aia_i, bib_i를 읽어, 전체 실행 시간을 최소로 만드는 작업 순서를 출력하는 프로그램을 작성하라. 전체 실행 시간이 최소가 되는 순서가 여러 개라면, 그중 사전순으로 가장 앞서는 것을 출력한다(작업 번호 수열을 앞에서부터 자리별로 비교한다).

입력

  • 첫째 줄에 작업의 개수 nn (1n10,000)(1 \le n \le 10{,}000)이 주어진다.
  • 이어지는 nn개의 줄에는 각각 음이 아닌 실수 aia_ibib_i (0ai1, 0bi1)(0 \le a_i \le 1,\ 0 \le b_i \le 1)가 공백 하나로 구분되어 주어진다. 각 수는 소수점 아래 정확히 여섯 자리까지 표기된 표준 십진수 형식이다. 이 nn개 줄 중 ii번째 줄은 작업 ii의 계수를 나타낸다.

출력

선택한 작업 순서를 1,,n1, \dots, n의 순열로, 한 줄에 작업 번호 하나씩 출력한다. 전체 실행 시간을 최소로 만드는 순서가 둘 이상이면, 그중 사전순으로 가장 앞서는 순서를 출력한다.