만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Quartets

시간 제한2초메모리 제한1024 MB

요약
카드 게임 기록이 주어질 때, 모든 행동이 규칙에 맞는 초기 카드 분배가 있는지 확인하고 없다면 부정이 확실해지는 첫 행동 번호를 구합니다.
난이도

보통10점 중 7점

유형
시뮬레이션, 구현, 그래프
정답자
아직 제출이 없습니다

문제

당신은 아이들이 Quartets라는 친선 게임을 즐겁게 하는 모습을 지켜보고 있습니다. 어느 순간 아이들 중 몇 명이 부정행위를 하고 있을지도 모른다는 의심이 들기 시작했습니다. 정작 아이들은 전혀 개의치 않는 눈치입니다. 오히려 누군가 부정행위가 들통나면 게임이 더 재미있어집니다. 프로그래머인 당신은 게임을 지켜보는 것만으로 부정행위를 찾아낼 방법을 곧바로 생각하기 시작했습니다.

Quartets는 88개의 세트로 나뉜 3232장의 카드 덱을 사용하는 44인용 카드 게임입니다. 각 세트에는 카드 44장이 있습니다. 실제 카드에는 교육용 그림이 자주 들어 있어서, 플레이어가 개별 대상뿐 아니라 그 분류 체계도 함께 배울 수 있습니다. 예를 들어 카드에는 동물이 그려져 있고, 세트는 포유류, 파충류 등 동물의 여러 집단에 대응할 수 있습니다.

Quartets 게임이 시작되면 각 플레이어는 카드 88장을 받고, 플레이어 11이 먼저 턴을 시작합니다. 한 턴에서 플레이어는 다른 플레이어에게 특정 카드를 가지고 있는지 묻습니다. 질문을 받은 플레이어가 그 카드를 가지고 있으면 반드시 질문한 플레이어에게 건네야 하며, 질문한 플레이어는 턴을 이어서 아무 플레이어에게나 다른 카드를 묻습니다. 질문을 받은 플레이어가 그 카드를 가지고 있지 않으면 질문한 플레이어는 턴을 잃고, 질문을 받은 플레이어가 턴을 시작합니다. 중요한 규칙은 질문하는 플레이어가 요청하는 카드와 같은 세트의 카드를 이미 한 장 이상 가지고 있어야 한다는 것입니다.

자신의 턴에 플레이어가 손에 완성된 세트("quartet")를 가지고 있으면, 그 플레이어는 다른 플레이어에게 이를 보여 주고 옆에 치운 뒤 1점을 얻을 수 있습니다. 완성된 세트의 카드 4장은 현재 게임에서 영구적으로 제거됩니다. 어떤 시점에든 카드가 한 장도 남지 않은 플레이어는 게임에서 떠납니다. 그 플레이어의 턴이었다면, 턴은 아직 카드를 가진 플레이어 중 순서상 다음 플레이어(플레이어 11-22-33-44-11-…\dots)에게 넘어갑니다. 모든 플레이어가 카드를 잃으면 게임이 끝나고, 점수가 가장 높은 플레이어가 승자로 선언됩니다.

플레이어는 게임에서 제거된 카드를 요청할 수 없으며, 게임을 떠난 플레이어에게서 카드를 요청할 수도 없습니다.

Quartets에서 부정행위는 플레이어가 특정 카드를 가지고 있다고(또는 가지고 있지 않다고) 거짓으로 주장하는 두 가지 상황에서 일어날 수 있습니다. 구체적으로 다음 중 하나라도 해당하면 부정행위입니다.

  • 플레이어가 해당 세트의 카드를 한 장도 가지고 있지 않으면서 카드를 요청하는 경우
  • 카드를 요청받은 플레이어가 요청받은 카드를 가지고 있으면서 가지고 있지 않다고 주장하는 경우

부정행위는 대개 나중에 드러납니다. 이론적으로는 주의 깊은 상대가 결국 모든 부정행위를 알아챌 수 있는데, 게임이 끝나기 전에 모든 카드가 결국 공개되기 때문입니다.

요청받은 플레이어가 도저히 가지고 있을 수 없는 카드를 요청하는 것(예를 들어 요청한 플레이어가 자기 손에 이미 그 카드를 들고 있는 경우)은 현명한 수는 아니지만, 그 자체로 부정행위로 보지는 않습니다.

입력

입력의 첫 줄에는 정수 nn (1≤n≤10001\le n\le 1000)이 주어집니다. 이는 Quartets 게임 한 판의 처음부터 시작하여 연속된 행동의 수입니다. 이어지는 nn개의 줄에는 각각 행동 하나가 적혀 있습니다. 행동은 다음 중 하나입니다.

  • x A y sk yes: 플레이어 xx가 플레이어 yy에게 카드 sksk를 요청하고, 플레이어 yy는 그 카드를 xx에게 건넵니다.
  • x A y sk no: 플레이어 xx가 플레이어 yy에게 카드 sksk를 요청하고, 플레이어 yy는 그 카드가 없다고 주장한 뒤 자신의 턴을 시작합니다.
  • x Q s: 플레이어 xx가 세트 ss의 완성된 세트를 옆에 치웁니다.

모든 행동에서 xx와 yy (1≤x,y≤41\le x,y\le 4, x≠yx \ne y)는 플레이어를 나타내는 정수이고, ss (1≤s≤81\le s\le 8)는 세트에 대응하는 한 자리 정수입니다. k∈{k \in \{A,B,C,D}\}는 한 세트 안의 카드 4장을 구별하는 문자입니다. 카드 sksk는 1A, 1B, 1C, 1D, 2A, 2B, ..., 8C, 8D로 표시됩니다. 앞자리 숫자가 같은 카드 4장이 하나의 세트를 이룹니다.

주어진 행동 순서는 4명의 플레이어가 진행한 유효한 게임을 나타냅니다. 위에서 언급한 두 가지 부정행위 가능성을 제외하면, 모든 행동은 규칙을 모두 따릅니다.

출력

카드의 초기 분배가 존재하여 행동 순서가 모든 플레이어가 규칙을 따르는 (부분적일 수도 있는) 게임에 해당할 수 있으면 yes를 출력합니다. 그렇지 않으면 no를 출력하고, 이어서 누군가 부정행위를 했다고 확실히 말할 수 있게 되는 첫 번째 행동의 번호를 한 줄에 출력합니다. 행동은 1부터 순서대로 번호가 매겨지며, 완성된 세트를 치우는 행동도 번호에 포함됩니다.

예제2

  1. 예제 1

    입력
    4
    1 A 2 3C no
    2 A 3 3A yes
    2 A 4 3D yes
    2 A 1 3C no
    
    예상 출력
    no
    4
    
  2. 예제 2

    입력
    6
    1 A 2 3C no
    2 A 3 3A yes
    2 A 4 3D yes
    2 A 1 3B no
    1 A 4 5B yes
    1 Q 5
    
    예상 출력
    yes