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

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

같다고 정말 같은 것은 아니다

면접 대비

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

요약
문자열이 주어졌을 때, 연속한 문자 쌍의 중복집합이 같은 다른 문자열이 존재하는지 판정한다.
난이도

보통10점 중 6점

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

문제

많은 프로그래밍 언어는 두 문자열이 같은지 검사하는 표준 함수를 제공하며, 그런 함수가 없더라도 같은 위치의 문자를 차례로 비교하면 쉽게 확인할 수 있다.

하지만 단순한 예/아니오 판정만으로는 부족할 때가 있다. 두 문자열이 완전히 같지는 않지만 차이가 아주 작다면, 얼마나 비슷한지를 나타내는 척도가 있으면 좋다. 같은 위치에 있는 문자가 몇 개나 일치하는지를 세어 길이로 나누는 방식은 만족스럽지 않다. 예를 들어 "ABCDEFABCDEF"와 "BCDEFABCDEFA"는 길이가 같고 거의 비슷하지만, 모든 위치의 문자가 서로 다르다.

이 문제를 피하는 더 나은 척도는 인접한 두 문자의 쌍을 살펴보는 것이다. 예를 들어 "ABCDEFABCDEF"에는 인접한 문자 쌍이 11개 있다. "AB" 두 개, "BC" 두 개, "CD" 두 개, "DE" 두 개, "EF" 두 개, 그리고 "FA" 한 개다. 이 중 10개는 "BCDEFABCDEFA"에도 나타나며, 오직 "AB" 하나만 "FA"로 바뀐다. 따라서 두 문자열의 일치도는 10/11≈91%10/11 \approx 91\%라고 할 수 있고, 이는 합리적이다. 이 척도는 길이가 다른 문자열로도 자연스럽게 확장된다.

그런데 이 척도에는 한 가지 단점이 있다. 길이가 같은 두 문자열의 일치도가 100%100\%라 해도 두 문자열이 반드시 같은 것은 아니다. 예를 들어 "ABACA"와 "ACABA"는 모두 "AC" 하나, "CA" 하나, "AB" 하나, "BA" 하나를 포함한다.

이제 임의의 문자열에 대해 이런 일이 가능한지 궁금하다. 즉, 문자열 xx가 주어졌을 때, 인접한 문자 쌍의 다중집합이 완전히 같은(일치도 100%100\%) 서로 다른 문자열 yy가 같은 길이로 존재하는가? 그런 yy가 존재하면 xx를 not unique, 존재하지 않으면 unique라고 부른다.

입력

첫 번째 줄에는 테스트 케이스의 개수를 나타내는 정수 하나가 주어진다. 각 테스트 케이스는 문자열 xx 하나로 이루어진 한 줄이며, 1≤∣x∣≤100001 \le |x| \le 10000이고 대문자 알파벳 {A,B,C,…,Z}\{A, B, C, \dots, Z\}만으로 구성된다.

출력

각 테스트 케이스마다, 문자열 xx가 unique이면 "unique"를, 그렇지 않으면 "not unique"를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    2
    ABCDEFABCDEF
    ABACA
    
    예상 출력
    unique
    not unique
    
  2. 예제 2

    입력
    4
    AB
    AA
    ABA
    BAB
    
    예상 출력
    unique
    unique
    not unique
    not unique