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

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

모호한 부호

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

요약
16진수 코드 단어 집합이 모호한지 판정하고, 모호하면 서로 다른 해석이 두 가지 이상인 가장 짧은 메시지의 길이를 구한다.
난이도

어려움10점 중 8점

유형
문자열, 그래프, BFS, 문자열 매칭
정답자
아직 제출이 없습니다

문제

통신을 하려면 서로 약속된 부호(code) 가 필요하다. 형식적으로, 알파벳(기호들의 유한 집합)이 주어졌을 때 부호란 그 알파벳 위의 공집합이 아닌 문자열들의 집합이며, 각 문자열을 부호어(code word) 라고 한다. 메시지는 부호어들을 차례로 이어 붙여 만든 문자열이다. 예를 들어 모스 부호에서 글자 "S"는 ..., "O"는 ---이므로 "SOS"는 ...---...가 된다.

어떤 메시지를 부호어들로 나누는 방법이 두 가지 이상 존재하면, 즉 서로 다른 해석(디코딩)이 둘 이상 있으면 그 부호를 모호하다(ambiguous) 고 한다. 그렇지 않으면 모호하지 않다고 한다.

예를 들어 이진 알파벳 {0,1}\{0, 1\} 위의 부호 {10,01,101}\{10, 01, 101\}은 모호하다. 메시지 10101을 10 101로도, 101 01로도 읽을 수 있기 때문이다. 반면에 부호 {01,10,011}\{01, 10, 011\}은 모호하지 않다. 이 부호로 만든 어떤 메시지도 서로 다른 두 가지 해석을 가지지 않는다.

주어진 부호가 모호한지 판정하는 프로그램을 작성하여라. 모호한 경우에는 그 부호로 만들 수 있는 가장 짧은 모호한 메시지의 길이(기호의 개수)도 함께 구하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 모든 테스트 케이스에서 알파벳은 16진 숫자, 즉 십진 숫자 0부터 9까지와 대문자 A부터 F까지의 집합이다.

각 테스트 케이스의 첫 줄에는 부호어의 개수를 나타내는 정수 NN (1≤N≤1001 \le N \le 100)이 주어진다. 이어지는 NN개의 줄에는 각각 하나의 부호어가 주어지며, 길이가 최대 5050인 공백 없는 16진 숫자 문자열이다. 한 테스트 케이스 안의 부호어들은 모두 서로 다르다.

입력의 끝은 N=0N = 0인 줄로 표시되며, 이 줄은 어떤 테스트 케이스에도 속하지 않으므로 처리하지 않는다.

출력

각 테스트 케이스마다 한 줄에 그 부호로 만들 수 있는 가장 짧은 모호한 메시지의 길이를 출력한다. 부호가 모호하지 않으면 -1을 출력한다.

예제3

  1. 예제 1

    입력
    3
    10
    01
    101
    3
    AB
    BA
    ABB
    0
    
    예상 출력
    5
    -1
    
  2. 예제 2

    입력
    1
    0
    0
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    2
    0
    00
    0
    
    예상 출력
    2