포커 패 정렬

시간 제한1초메모리 제한128 MB

문제

포커에서 각 플레이어는 5장의 카드를 손에 듭니다. 마지막 라운드가 끝나면 모든 플레이어가 자신의 카드를 공개하고, 가장 가치가 높은 패를 가진 플레이어가 승리합니다. 여러분의 과제는 각 플레이어의 포커 패를 읽어 상대적인 가치에 따라 순위를 매기고, 가장 가치가 높은 패부터 낮은 패 순서로 출력하는 것입니다.

포커는 4개의 무늬로 균등하게 나눈 52장의 카드로 진행합니다: 하트(♥), 스페이드(♠), 다이아몬드(♦), 클럽(♣). 각 무늬는 13장의 카드를 가지며, 각 카드에는 가치를 결정하는 랭크가 있습니다. 높은 것부터 낮은 것까지 순서는 다음과 같습니다: 에이스(높음), 킹, 퀸, 잭, 10, 9, 8, 7, 6, 5, 4, 3, 2, 에이스(낮음). 각 무늬에는 에이스가 한 장뿐이고 보통 가장 높은 카드로 취급되지만, 어떤 경우에는 에이스가 가장 낮은 카드로 취급됩니다. 무늬 자체는 카드의 가치에 영향을 주지 않으며, 오직 그 패가 플러시나 스트레이트 플러시에 해당하는지를 판정하는 데만 사용됩니다(아래 참고).

모든 포커 패는 그 안에 포함된 카드 조합에 따라 아홉 가지 등급 중 정확히 하나로 분류됩니다. 등급이 높은 패는 개별 카드의 랭크와 무관하게 항상 등급이 낮은 패를 이깁니다. 두 패가 같은 등급이면 개별 카드의 랭크로 우열을 가리며, 각 등급마다 고유한 동점 처리 규칙이 있습니다. 패 안에서 카드가 놓인 순서는 등급에 영향을 주지 않습니다. 등급은 가장 가치가 높은 것부터 낮은 것까지 아래와 같습니다.

  1. 스트레이트 플러시 — 다섯 장이 모두 같은 무늬이고 랭크가 연속됩니다. 두 스트레이트 플러시 사이에서는 가장 높은 카드가 큰 쪽이 이깁니다. 이 등급에는 로우 에이스 규칙이 적용됩니다: 5, 4, 3, 2, 에이스로 이루어진 패는 에이스를 가장 낮은 카드로 봅니다(따라서 5가 가장 높습니다). 예: A♥ K♥ Q♥ J♥ 10♥ 는 K♠ Q♠ J♠ 10♠ 9♠ 를 이기고, 6♦ 5♦ 4♦ 3♦ 2♦ 는 5♣ 4♣ 3♣ 2♣ A♣ 를 이깁니다.
  2. 포 카드 — 같은 랭크의 카드 네 장과 다른 랭크의 다섯 번째 카드로 이루어집니다. 네 장의 랭크가 더 높은 쪽이 이깁니다. 네 장의 랭크가 같다면 다섯 번째 카드가 더 높은 쪽이 이깁니다. 예: 8♣ 8♥ 8♠ 8♦ Q♣ 는 2♣ 2♥ 2♠ 2♦ A♦ 를 이기고, 4♣ 4♥ 4♠ 4♦ A♥ 는 4♣ 4♥ 4♠ 4♦ J♥ 를 이깁니다.
  3. 풀 하우스 — 한 랭크의 세 장과 다른 랭크의 두 장(페어)으로 이루어집니다. 세 장의 랭크가 더 높은 쪽이 이깁니다. 세 장의 랭크가 같다면 페어의 랭크가 더 높은 쪽이 이깁니다. 예: 4♦ 4♥ 4♣ Q♠ Q♣ 는 3♣ 3♠ 3♥ K♦ K♥ 를 이기고, Q♥ Q♦ Q♠ J♦ J♣ 는 Q♥ Q♦ Q♠ 10♥ 10♠ 를 이깁니다.
  4. 플러시 — 다섯 장이 모두 같은 무늬입니다(단, 스트레이트가 아님). 가장 높은 카드가 큰 쪽이 이깁니다. 가장 높은 카드가 같으면 그다음으로 높은 카드를 비교하며, 이런 식으로 계속합니다. 예: Q♦ 8♦ K♦ J♦ 2♦ 는 J♠ 10♠ 9♠ 2♠ 8♠ 를 이기고, Q♥ J♥ 9♥ 8♥ 3♥ 는 Q♣ J♣ 7♣ 3♣ 2♣ 를 이깁니다.
  5. 스트레이트 — 다섯 장의 랭크가 연속됩니다(단, 모두 같은 무늬는 아님). 가장 높은 카드가 큰 쪽이 이깁니다. 로우 에이스 규칙이 적용됩니다: 5, 4, 3, 2, 에이스로 이루어진 패는 에이스를 가장 낮은 카드로 봅니다. 예: Q♠ J♣ 10♠ 9♥ 8♦ 는 7♥ 6♦ 5♥ 4♠ 3♦ 를 이기고, A♣ K♠ Q♣ J♣ 10♥ 는 5♦ 4♥ 3♣ 2♠ A♥ 를 이깁니다.
  6. 트리플 — 같은 랭크의 세 장과, 서로 및 그 세 장과 랭크가 겹치지 않는 두 장의 카드(키커)로 이루어집니다. 세 장의 랭크가 더 높은 쪽이 이깁니다. 세 장의 랭크가 같다면 더 높은 키커를 비교하고, 그다음 키커를 비교합니다. 예: 7♥ 7♣ 7♠ J♦ 10♠ 는 4♥ 4♠ 4♦ 7♣ Q♦ 를 이기고, 8♠ 8♥ 8♦ 3♠ 6♦ 는 8♣ 8♦ 8♠ 3♦ 5♥ 를 이깁니다.
  7. 투 페어 — 한 랭크의 두 장, 다른 랭크의 두 장, 그리고 어느 페어와도 랭크가 겹치지 않는 다섯 번째 카드(키커)로 이루어집니다. 더 높은 페어를 가진 쪽이 이깁니다. 높은 페어가 같으면 낮은 페어를 비교하고, 두 페어가 모두 같으면 키커가 더 높은 쪽이 이깁니다. 예: K♥ K♣ 3♦ 3♣ 2♠ 는 J♦ J♥ Q♠ Q♣ K♠ 를 이기고, 8♠ 8♣ 5♦ 5♣ 3♥ 는 8♥ 8♦ 4♠ 4♦ 3♣ 를 이깁니다.
  8. 원 페어 — 같은 랭크의 카드 두 장(페어)과, 페어와도 서로와도 랭크가 겹치지 않는 세 장의 카드(키커)로 이루어집니다. 페어가 더 높은 쪽이 이깁니다. 페어가 같으면 가장 높은 키커를 비교하고, 그다음, 또 그다음 키커를 비교합니다. 예: 4♥ 4♦ 8♥ 10♦ J♠ 는 3♥ 3♠ Q♣ 8♥ 2♦ 를 이기고, 9♠ 9♦ 10♥ J♥ 4♣ 는 9♥ 9♣ J♠ 7♥ 8♦ 를 이깁니다.
  9. 하이 카드 — 위의 어느 등급에도 속하지 않는 패입니다. 즉 모든 카드의 랭크가 서로 다르고, 모두 같은 무늬가 아니며, 연속된 랭크도 아닙니다. 가장 높은 카드가 큰 쪽이 이기며, 같으면 그다음으로 높은 카드를 비교하는 식으로 계속합니다. 예: 8♣ K♠ 3♥ J♦ 2♥ 는 10♥ J♠ 8♣ 7♥ 6♦ 를 이기고, A♠ 3♦ 4♥ Q♥ J♣ 는 K♠ 8♣ Q♥ 10♦ 9♥ 를 이깁니다.

입력

첫 번째 줄에는 데이터 집합의 개수를 나타내는 정수 N(1 ≤ N ≤ 100)이 주어집니다. 각 데이터 집합은 그 집합에 포함된 포커 패의 개수를 나타내는 정수 M(1 ≤ M ≤ 100)이 적힌 줄로 시작합니다. 이어지는 M개의 줄에는 각각 하나의 패가 주어지며, 한 패는 공백으로 구분된 두 글자짜리 카드 다섯 장으로 이루어집니다.

  • 첫 번째 글자는 카드의 랭크를 나타냅니다: A, K, Q, J 는 각각 에이스, 킹, 퀸, 잭을 의미하고, 0(숫자 0)은 10을, 2부터 9까지는 해당 숫자 랭크를 의미합니다.
  • 두 번째 글자는 카드의 무늬를 나타냅니다: H, S, D, C 는 각각 하트, 스페이드, 다이아몬드, 클럽을 의미합니다.

한 패 안에서 같은 카드(랭크와 무늬가 모두 같은 카드)가 두 번 이상 나타나는 일은 없습니다.

출력

각 데이터 집합에 대해 먼저 Data Set #k 라는 제목 줄을 출력합니다. 여기서 k는 첫 번째 데이터 집합이면 1, 두 번째면 2와 같이 이어집니다. 제목 다음에는 그 데이터 집합의 패들을 가장 가치가 높은 것부터 낮은 것 순서로 한 줄에 하나씩 출력합니다. 각 패 안의 카드는 입력에서 읽은 순서 그대로 출력해야 합니다. 한 데이터 집합 안의 어떤 두 패도 가치가 같지 않으므로, 정렬 순서는 항상 유일하게 정해집니다.