아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

피보나치 게임

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

요약
a와 b로 이루어진 문자열에서 오른쪽 끝의 피보나치 단어만 지우는 게임에서 선수가 이기는지 판정한다.
난이도

어려움10점 중 8점

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

문제

피보나치 단어 fif_i를 다음과 같이 정의한다. f1=af_1 = a, f2=bf_2 = b이고, i≥3i \ge 3일 때 fi=fi−2fi−1f_i = f_{i-2} f_{i-1}이다. 즉 번호가 ii인 피보나치 단어는 번호가 i−2i-2인 단어와 i−1i-1인 단어를 순서대로 이어 붙여서 만든다. 예를 들어 f3=abf_3 = ab, f4=babf_4 = bab, f5=abbabf_5 = abbab이다.

피보나치 게임은 두 사람이 한다. 두 사람은 a와 b로만 이루어진 하나의 단어(이 단어를 판이라고 부른다) 위에서 게임을 한다. 두 사람은 번갈아 가며 수를 두며, 한 번의 수는 판의 오른쪽 끝에서 임의의 피보나치 단어 하나를 지우는 것이다. 더 이상 수를 둘 수 없는 사람이 진다. 주어진 단어에 대해, 먼저 두는 사람이 (두 사람 모두 최선을 다할 때) 항상 이길 수 있는지 판정하라.

테스트 케이스의 개수를 입력받아, 각 테스트 케이스마다 게임을 진행할 단어를 표준 입력에서 읽고, 먼저 두는 사람이 항상 이길 수 있는지 판정하여 그 결과를 표준 출력에 출력하는 프로그램을 작성하라.

입력

첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 tt (1≤t≤101 \le t \le 10)가 주어진다. 이어지는 tt개의 줄에 각 테스트 케이스가 한 줄에 하나씩 주어진다. 각 줄에는 양의 정수 nn (1≤n≤100 0001 \le n \le 100\,000)이 주어지고, 공백 한 칸 뒤에 a와 b로 이루어진 길이 nn의 문자열이 (글자 사이에 공백 없이) 이어진다. 이 문자열이 게임을 진행할 판이다.

출력

tt개의 줄을 출력한다. 각 줄에는 입력에 주어진 것과 같은 순서로 각 테스트 케이스에 대한 답을 출력한다. 먼저 두는 사람이 항상 이길 수 있으면 TAK을, 그렇지 않으면 NIE를 출력한다.

예제3

  1. 예제 1

    입력
    2
    5 aaaaa
    10 abbababbaa
    
    예상 출력
    TAK
    NIE
    
  2. 예제 2

    입력
    3
    1 a
    1 b
    2 ab
    
    예상 출력
    TAK
    TAK
    TAK
    
  3. 예제 3

    입력
    6
    5 aaaaa
    6 aaaaaa
    5 bbbbb
    6 bbbbbb
    1 a
    2 aa
    
    예상 출력
    TAK
    NIE
    TAK
    NIE
    TAK
    NIE