마이크로RNA 순위
시간 제한2초메모리 제한512 MB
n개 항목의 순열 k개가 주어질 때, 앞선 항목이 뒤 항목보다 과반 이상의 순열에서 앞서는 순열을 찾고, 그러한 순열이 여러 개면 사전순으로 가장 작은 것을 출력한다.
문제
알람은 컴퓨터공학을 공부하는 학생이고, 세포 안에서 발견되는 분자인 마이크로RNA를 다루는 생물정보학 주제로 석사 논문을 쓰고 있다. 알람은 사람의 특정 건강 지표와 관련이 깊은 마이크로RNA를 찾으려 한다.
알람은 마이크로RNA 순위 알고리즘 개를 설계했다. 각 알고리즘은 저마다의 관점으로 마이크로RNA의 순위를 매긴다. 마이크로RNA는 번부터 번까지 개가 있고, 각 알고리즘은 이 개의 순열 하나를 출력한다. 한 알고리즘이 출력한 순열에서 맨 앞의 마이크로RNA는 그 알고리즘이 건강 지표와 가장 관련이 깊다고 판단한 것이고, 맨 뒤의 마이크로RNA는 가장 관련이 적다고 판단한 것이다.
알람은 합의 순위를 하나 구하려 한다. 합의 순위에서 마이크로RNA 가 마이크로RNA 보다 앞에 놓이려면, 알고리즘 중 적어도 절반이 를 보다 앞에 매겨야 한다. 알람을 도와 합의 순위를 찾는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에 마이크로RNA의 개수 과 순위 알고리즘의 개수 가 공백으로 구분되어 주어진다. (, )
다음 개의 줄 중 번째 줄에는 번 알고리즘이 출력한 부터 까지의 순열이 주어진다.
입력의 마지막 줄에는 0 0이 주어진다. 이 줄은 처리하지 않는다.
출력
각 테스트 케이스마다 합의 순위가 되는 부터 까지의 순열을 한 줄에 출력한다. 두 수 사이에는 공백을 하나 넣는다.
합의 순위가 여러 개면 그중 사전순으로 가장 앞서는 것을 출력한다. 수열 이 수열 보다 사전순으로 앞선다는 것은, 어떤 양의 정수 가 있어 인 모든 에 대해 이고 인 경우를 뜻한다.
합의 순위가 존재하지 않으면 대신 No solution을 출력한다.