시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
3 초 256 MB 50 24 21 51.220%

문제

당신은 muse와 함께 아래 규칙으로 게임을 해, 승리해야 한다.

  • 처음에 $N$개의 돌이 있으며, 게임은 당신부터 시작한다.
  • 맨 처음에 당신은 무조건 돌을 한 개 가져가야 한다.
  • 그 다음 차례부터는 돌을 1개 이상 ${x+1}$개 이하로 가져갈 수 있다. 이때, $x$는 전 차례에 상대방이 가져간 돌멩이의 개수이다.
  • 마지막 돌을 가져가는 사람이 이긴다.

그런데, 사악한 muse는 돌의 개수 $N$을 자신이 이길 수밖에 없게 설정해 놓기도 한다! 따라서 당신은 돌의 개수를 보고, 이길 수 없다고 판단되면 첫 수를 두기 전에 게임을 끝내야 한다. muse는 이길 수 있는 경우에서 항상 최선의 수를 둔다. 이때, 게임에서 이길 수 있겠는가?

입력

돌의 개수 $N$이 주어진다. ($2 \le N \le 10^5$)

출력

먼저, 돌의 개수를 보고 당신이 이길 수 있는지 판단하여라. 이길 수 없다고 판단될 경우 NO를 출력하고 프로그램을 바로 종료해야 한다. 이길 수 있다고 판단될 경우 YES를 출력하고 게임을 진행한다.

수를 둘 때는 가져갈 돌의 개수를 정수로 출력해야 한다. 이때 출력하고 난 뒤, 줄을 바꾸고 버퍼를 비워야 한다.

당신이 수를 두고 나면 muse 역시 수를 둔다. muse가 가져간 돌의 개수를 입력받아 저장한 뒤, 다시 당신이 수를 두면 된다.

게임이 끝나거나 당신이 잘못된 수를 둘 경우 (예: 가져간 돌의 개수가 음수이거나, 현재 있는 돌의 개수보다 많은 경우) 다음 수에서 프로그램은 즉시 종료되며, 문제를 틀리게 된다. 당신이 이겼을 경우, 프로그램은 즉시 종료되어야 한다. 그렇지 않으면, 시간 초과 등 예상치 못한 채점 결과를 받을 수 있다.

이길 수 없는 게임을 이길 수 있다고 판단하고 게임을 시작할 경우, 즉시 오답 판정을 받는 것이 아닌, 게임이 모두 진행된 뒤에 오답 판정을 받는 것임에 유의하자. muse는 이길 수 있는 상황에서 항상 최선의 수를 둔다.

예제 입력 1

6


2
 

예제 출력 1


YES
1

3

위 예시는 입출력이 어떤 방식으로 이루어지는지 이해를 돕기 위해 의도적으로 개행 간격 등을 조절한 것으로, 실제 입출력과는 다르다.

예제 입력 2

7

예제 출력 2


NO

힌트

이 문제는 muse와 게임을 하는 문제이다. 따라서 muse가 당신이 어떤 수를 두었는지 확인하려면, 당신은 출력을 할 때마다 버퍼를 비워 줘야 한다. 출력을 한 번 할 때마다 출력 명령문 바로 아래 줄에 다음과 같은 문장을 추가하면 된다.

  • C / C++의 경우: fflush(stdout);
  • python의 경우: sys.stdout.flush()

채점

  • 예제는 채점하지 않는다.