부분 문자열 선택 게임

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

요약
현재 수의 자릿수로 이루어진 부분 문자열이 나타내는 값을 번갈아 빼는 게임에서, 선공이 승리를 확정할 수 있는 가장 작은 첫 수를 구하고 불가능하면 -1을 출력합니다.
난이도

보통10점 중 5점

유형
게임 이론, 동적 계획법, 문자열, 완전 탐색
정답자
아직 제출이 없습니다

문제

게임 판에는 자연수 N이 적혀 있다. 두 플레이어는 번갈아 차례를 진행한다.

자신의 차례가 되면, 플레이어는 현재 게임 판에 적힌 수의 진부분 문자열이 나타내는 양의 정수 M을 하나 고른다. 진부분 문자열은 전체 문자열 자신을 제외한 모든 연속된 부분 문자열이다. M을 고른 뒤에는 현재 수에서 M을 뺀다.

현재 수가 2309라면 고를 수 있는 수에는 2, 3, 9, 23, 30, 230, 309 등이 있다. 2를 고르면 현재 수는 2307이 되고, 309를 고르면 2000이 된다.

자신의 차례에 고를 수 있는 양의 정수가 없으면 그 플레이어가 진다.

처음 게임 판에 적힌 수 N이 주어질 때, 첫 번째 플레이어가 이기기 위해 첫 차례에 고를 수 있는 수를 출력하라. 가능한 수가 여러 개라면 가장 작은 수를 출력하고, 이길 수 없다면 -1을 출력하라.

입력

첫째 줄에 자연수 N이 주어진다. N은 1,000,000 이하이다.

출력

첫 번째 플레이어가 이기는 첫 수 중 가장 작은 값을 출력한다. 그런 수가 없으면 -1을 출력한다.

예제6

  1. 예제 1

    입력
    5
    
    예상 출력
    -1
    
  2. 예제 2

    입력
    10
    
    예상 출력
    1
    
  3. 예제 3

    입력
    17
    
    예상 출력
    -1
    
  4. 예제 4

    입력
    239
    
    예상 출력
    9
    
  5. 예제 5

    입력
    566
    
    예상 출력
    66
    
  6. 예제 6

    입력
    23900
    
    예상 출력
    -1