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

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

거의 켤레인 단어

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

요약
길이가 n인 두 단어가 '거의 켤레'인지 판정하고, 그렇다면 첫 단어를 회전해 둘째 단어와 정확히 한 위치만 다른 모든 회전 횟수를 오름차순으로 출력한다.
난이도

어려움10점 중 8점

유형
문자열, 문자열 매칭, 수학, 구현
정답자
아직 제출이 없습니다

문제

엄밀히 따지면 almost(거의)라는 단어는 no(아니오)와 같은 뜻입니다. 하지만 둘이 완전한 동의어는 아닙니다. 오히려 almost는 no보다 yes(예)에 더 가깝습니다.

두 단어가 켤레(conjugate) 라는 것은, 첫 번째 단어의 맨 앞 글자를 맨 뒤로 옮기는 연산을 여러 번 되풀이하여 두 번째 단어를 만들 수 있다는 뜻입니다. 예를 들어 ababa와 abaab는 켤레이지만, ababa와 baaab는 켤레가 아닙니다.

두 단어가 거의 켤레(almost conjugate) 라는 것은 다음 두 조건을 모두 만족한다는 뜻입니다.

  • 두 단어가 켤레가 아니고,
  • 첫 번째 단어의 맨 앞 글자를 맨 뒤로 옮기는 연산을 여러 번 되풀이하여, 두 번째 단어와 정확히 한 자리에서만 다른 단어를 만들 수 있습니다.

예를 들어 ababa와 aaaab는 거의 켤레이지만, ababa와 bbbbb는 거의 켤레가 아닙니다.

표준 입력에서 두 단어를 읽어, 두 단어가 거의 켤레인지 판정하고, 거의 켤레라면 그 증거가 되는 이동 횟수들을 출력하는 프로그램을 작성하세요.

입력

첫째 줄에 각 단어의 길이를 나타내는 정수 nn (1≤n≤1061 \le n \le 10^6)이 주어집니다. 둘째 줄에는 첫 번째 단어가, 셋째 줄에는 두 번째 단어가 주어집니다. 각 단어는 알파벳 소문자 nn개로 이루어진 문자열입니다.

출력

두 단어가 거의 켤레이면 첫째 줄에 TAK(폴란드어로 예)를, 그렇지 않으면 NIE(폴란드어로 아니오)를 출력합니다.

첫째 줄이 TAK인 경우, 둘째 줄에는 [0,n−1][0, n-1] 범위의 음이 아닌 정수를 오름차순으로, 공백 하나로 구분하여 출력합니다. 이 수열에는 첫 번째 단어의 맨 앞 글자를 맨 뒤로 옮기는 연산을 그만큼 적용했을 때 결과 단어가 두 번째 단어와 정확히 한 자리에서만 다르게 되는 모든 이동 횟수가 포함되어야 합니다.

예제2

  1. 예제 1

    입력
    5
    ababa
    aaaab
    
    예상 출력
    TAK
    2 4
    
  2. 예제 2

    입력
    5
    ababa
    bbbbb
    
    예상 출력
    NIE