달러와 유로
시간 제한1초메모리 제한128 MB
달러 기준 정렬 절차에 따라 2n-1개 지갑 중 n개를 골라 달러와 유로 합계를 각각 절반 이상 확보합니다.
문제
월레스는 잘 알려진 갱스터, 진짜배기 G입니다. 여느 갱스터처럼 그는 보석을 사는 데 즐겨 쓰는 큰돈을 가지고 있습니다. 안전을 위해 그는 돈을 지갑 하나에 몰아넣지 않고 여러 지갑에 나누어 둡니다. 이제 월레스는 동료들과 함께 시내로 놀러 나가려고 합니다.
그는 지갑의 약 절반만 챙겨 가고 싶지만, 동시에 충분한 돈을 지니고 싶어 합니다. 좀 더 정확히 말하면, 월레스는 개의 지갑을 가지고 있고, 각 지갑에는 얼마간의 달러와 얼마간의 유로가 들어 있습니다. 그는 나들이에 정확히 개의 지갑을 챙기려 하는데, 챙긴 개 지갑에 든 달러의 합이 전체 개 지갑에 든 달러 합의 절반 이상이고, 챙긴 개 지갑에 든 유로의 합도 전체 지갑에 든 유로 합의 절반 이상이 되도록 하고 싶습니다.
월레스는 돈 버는 법을 알고, 당신은 프로그래밍을 압니다. 무엇을 해야 할지 이제 아시겠죠.
입력
입력의 첫 줄에는 데이터 집합의 개수를 나타내는 정수 가 주어집니다. 이어서 각 데이터 집합의 설명이 주어집니다.
각 데이터 집합의 첫 줄에는 정수 ()이 주어지며, 이는 월레스가 개의 지갑을 가지고 있음을 뜻합니다. 다음 개의 줄에는 각 지갑의 정보가 주어집니다. 각 줄에는 두 정수 , ()가 있으며, 이는 번째 지갑에 달러와 유로가 들어 있음을 뜻합니다.
모든 데이터 집합에 대한 의 합은 을 넘지 않는다고 가정해도 됩니다.
출력
각 데이터 집합에 대한 답을 차례대로 출력합니다.
조건을 만족하는 개의 지갑을 항상 고를 수 있음이 알려져 있습니다. 답을 유일하게 정하기 위해, 월레스가 다음의 고정된 방법으로 지갑을 고른다고 가정합니다.
- 입력에 주어진 순서대로 지갑에 의 번호를 매깁니다.
- 지갑을 달러가 많은 순으로 정렬합니다. 달러가 같으면 유로가 많은 순으로, 그래도 같으면 지갑 번호가 작은 순으로 정렬합니다.
- 이 순서에서 첫 번째 지갑을 챙깁니다.
- 남은 개의 지갑을 같은 순서로 두 개씩 짝지어(2번째와 3번째, 4번째와 5번째, ...) 묶습니다. 각 짝에서는 유로가 더 많은 지갑을 챙깁니다. 유로가 같으면 달러가 더 많은 지갑을, 그래도 같으면 지갑 번호가 더 작은 지갑을 챙깁니다.
이렇게 하면 정확히 개의 지갑이 선택되고, 두 조건이 항상 만족됩니다.
각 데이터 집합마다 두 줄을 출력합니다. 첫 줄에는 Yo를 출력합니다. 둘째 줄에는 선택한 개의 지갑 번호를 오름차순으로 공백 하나로 구분하여 출력합니다.