# 랭킹전 대기열 import sys input = sys.stdin.readline def solution(): p, m = map(int, input().rstrip().split()) room = {} for i in range(p): l, n = input().rstrip().split() l = int(l) for j in room: if len(room[j]) < m and l >= j[0]-10 and l <= j[0]+10: room[j].append((l, n)) break else: room[(l, n)] = [(l, n)] for v in room.values(): if len(v) == m: print("Started!") else: print("Waiting!") for j in sorted(v, key=lambda x: x[1]): print(*j) return solution() """ 걸린 시간: 50분 시간 복잡도: p개의 플레이어를 방에 분배하기 위해 각 방을 확인해보는 시간 복잡도도 균등분배 기준으로 p//m개 방이므로, O(p* p//m) = O(p^2*m)이다. room.values()를 확인하며 정렬하고 출력하는 것은 p//m 즉 균등분배 가정으로 나올 수 있는 최대 방 개수만큼 정렬하기 때문에 O(mlogm * p//m)이므로 O(plogm)이다. 따라서 전체 시간 복잡도는 O(p^2*m)이다. p, m <= 300이기 때문에 그냥했지만 크기가 커진다면 모르기 때문에 들어갈 방을 범위로 나타내서 이분탐색을 하면 줄일 수 있다. 물론 방이 다 차면 같은 범위를 가지는 방이 또 필요할 수 있기 때문에 적절히 조치를 취해야한다. 해설: p개의 플레이어를 확인하면서 맞는 room이 있다면 넣고, 없다면 room을 만든다. 이때, 딕셔너리를 사용했는데 level만 키로 쓰면 중복될 수 있으므로, (level, name)을 키로 써서 해야한다. 플레이어마다 생성된 room을 순서대로 다 범위를 확인한다. (이분 탐색을 쓰면 더 좋겠다.) 다 room에 넣은 후 room 길이에 따라 started와 waiting을 쓰고, 이름 순으로 정렬한 뒤 출력한다. """