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

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

산책

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

요약
n비트 이름 중 일부가 없을 때, 한 비트씩만 바꾸는 경로로 두 마을이 서로 이어져 있는지 판정한다.
난이도

보통10점 중 7점

유형
BFS, 그래프, 비트 연산, 해시맵
정답자
아직 제출이 없습니다

문제

바이트오티아(Byteotia)의 마을 이름은 정확히 nn개의 비트로 이루어진 서로 다른 이진 문자열이다. 이 나라에는 마을이 2n−k2^n - k개 있으며, 따라서 길이 nn짜리 비트열 중 정확히 kk개는 어떤 마을의 이름도 아니다.

일부 마을 쌍은 도로로 직접 연결되어 있다. 구체적으로, 두 마을의 이름이 정확히 한 비트에서만 다를 때, 그리고 그럴 때에만 두 마을은 도로로 직접 이어진다. 도로는 마을 바깥에서 서로 교차하지 않는다.

바이트아사르(Byteasar)는 마을 xx에서 출발하여 도로만을 따라 마을 yy까지 산책하려고 한다. 마을 xx에서 마을 yy로 이러한 산책이 가능한지 판정하는 프로그램을 작성하여라.

입력

첫째 줄에 두 정수 nn과 kk가 공백 하나로 구분되어 주어진다 (1≤n≤601 \le n \le 60, 0≤k≤1,000,0000 \le k \le 1{,}000{,}000, k≤2n−1k \le 2^n - 1, n⋅k≤5,000,000n \cdot k \le 5{,}000{,}000). nn은 마을 이름의 비트 길이이고, kk는 어떤 마을의 이름도 아닌 길이 nn짜리 비트열의 개수이다.

둘째 줄에는 공백으로 구분된 두 문자열이 주어지며, 각각 0과 1로 이루어진 길이 nn의 이름이다. 이는 각각 마을 xx와 yy의 이름이다.

이어지는 kk개의 줄에는 어떤 마을의 이름도 아닌 길이 nn짜리 비트열이 한 줄에 하나씩 주어진다. 각 비트열은 0과 1로 이루어진 길이 nn의 문자열이다. xx와 yy는 이 kk개의 비트열에 포함되지 않는다.

출력

마을 xx에서 마을 yy로 산책이 가능하면 TAK(폴란드어로 '예')를, 불가능하면 NIE(폴란드어로 '아니오')를 한 줄에 출력한다.

힌트

예를 들어 00000000에서 10111011로 가는 산책은 다음과 같이 두 가지가 가능하다.

  • 0000→1000→1100→1110→1111→10110000 \to 1000 \to 1100 \to 1110 \to 1111 \to 1011
  • 0000→0100→1100→1110→1111→10110000 \to 0100 \to 1100 \to 1110 \to 1111 \to 1011

예제2

  1. 예제 1

    입력
    4 6
    0000 1011
    0110
    0111
    0011
    1101
    1010
    1001
    
    예상 출력
    TAK
    
  2. 예제 2

    입력
    2 2
    00 11
    01
    10
    
    예상 출력
    NIE