토러스 게임 조작하기

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

요약
구로 바꿀 토러스를 골라 후공이 이기도록 만들 수 있는지 판정하고, 가능하면 Y와 선택한 번호를, 불가능하면 N을 출력한다.
난이도

어려움10점 중 8점

유형
게임 이론, 수학, 그리디, 조합론
정답자
아직 제출이 없습니다

문제

토러스는 아래 그림과 같이 구멍이 하나 있는 도넛 형태의 도형을 의미한다.

두 플레이어가 NN개의 토러스 위에서 그래프 게임을 한다. 처음에 각 토러스의 표면에는 A_1A\_1, A_2A\_2, ⋯\cdots, A_NA\_N개의 정점이 존재하고, 이 정점들 사이에는 간선이 없다. 게임은 두 플레이어가 번갈아 다음의 작업을 수행하며 진행된다.

  • 현재 게임에 존재하는 토러스 중 하나를 선택하여, 선택한 토러스 위의 정점을 원하는 대로 움직인다. 정점은 항상 항상 토러스의 표면을 따라서만 움직일 수 있으며, 정점을 움직일 때는 정점과 연결된 간선을 함께 움직여 연결이 끊기지 않도록 해야 한다. 이때 서로 다른 두 정점이 같은 위치에 존재하도록 만들어서는 안 된다.
  • 한 개 이상의 간선을 추가한다. 간선은 토러스의 표면에 존재해야 하며, 연결하는 두 정점 사이의 연속적인 경로가 되어야 한다는 조건만 만족한다면 어떤 형태로든 만들 수 있다. 이때 중복 간선이나 루프를 만들어서는 안 된다.
  • 선택한 토러스 위에 존재하는 간선 중 원하는 것을 새로 그린다. 다만 이 과정에서 정점 사이의 연결 관계가 변화해서는 안 된다.

작업이 끝난 후, 작업을 수행했던 토러스 위에 다음의 경우가 존재하면 그 작업을 수행한 플레이어가 즉시 패배한다.

  • 서로 교차하는 간선이 존재하는 경우
  • 정점이 간선 위에 존재하는 경우

다만 작업을 수행하는 도중에는 앞의 조건이 충족되어도 패배하지 않는다.

후공인 당신은 게임에서 승리하기 위해 토러스를 미리 조작하려고 한다. 여기서 조작이란, 게임에 존재하는 00개 이상 NN개 이하의 토러스를 골라 구멍을 메워 구(sphere)로 만드는 것이다. 작업에는 조작된 구를 선택할 수 있으며, 처음 상태에서 구는 조작 전의 토러스 위에 있던 것과 같은 개수의 정점을 가진다.

두 플레이어가 모두 최선의 전략을 사용해 게임을 할 때, 선공이 패배하도록 게임을 조작할 수 있는지 판별하고, 가능하다면 그 방법을 출력하라. 방법이 여러 가지라면 아무거나 출력해도 정답으로 인정된다.

입력

첫 번째 줄에 토러스의 수 N(1≤N≤106)N(1\le N\le 10^6)이 주어진다.

두 번째 줄에 각 토러스 위에 있는 정점의 개수를 나타내는 NN개의 정수 A_1A\_1, A_2A\_2, ⋯\cdots, A_N(2≤A_i≤1018)A\_N(2\le A\_i \le 10^{18})이 공백으로 구분되어 주어진다.

출력

선공이 패배하도록 토러스를 미리 조작하는 방법이 존재한다면 Y를, 그럴 수 없다면 N을 출력한다.

Y를 출력한 경우, 그다음 줄에 조작된 토러스의 개수를 출력하고, 조작된 토러스의 개수가 한 개 이상인 경우 그 다음 줄에 조작된 토러스의 번호를 공백으로 구분하여 출력한다.

반드시 각 번호는 한 번씩만 등장해야 하고, 출력 순서는 무관하다.

힌트

토러스나 구의 크기는 게임의 승패에 영향을 주지 않음을 증명할 수 있다.

예제4

  1. 예제 1

    입력
    1
    3
    
    예상 출력
    N
    
  2. 예제 2

    입력
    2
    2 2
    
    예상 출력
    Y
    0
    
  3. 예제 3

    입력
    2
    2 3
    
    예상 출력
    N
    
  4. 예제 4

    입력
    5
    5 7 8 9 9
    
    예상 출력
    Y
    3
    1 3 4