페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#4853

문자열 별칭 1s 256MB

문제

소문자 10자 이하로 이루어진 문자열이 N개 주어진다.

동일한 문자열이 여러번 주어질 수 있다.

 

주어진 순서대로 아래 규칙에 맞게 문자열(str)의 별칭을 만든다.

 

1) str의 접두사여야 한다. ("abcd"의 접두사 : "a", "ab", "abc", "abcd")

2) 이전에 등장한 문자열의 접두사가 아니어야 한다.

3) 위 조건을 만족하는 것 중 가장 짧아야 한다.

4) 만약, 위 조건을 만족하는 별칭이 존재하지 않는다면 현재까지 str과 일치하는 문자열이 등장한 횟수 cnt를 기준으로 별칭을 정한다.  (cnt는 str을 포함한 횟수이다.)

    a. cnt==1, str

    b. cnt > 1, str+cnt

 

ex)

son -> s 

sonny -> sonn     // s, so, son 은 son의 접두사이다

song -> song     

so -> so          // s, so는 이전 문자열들의 접두사이므로 4-a 조건에 의해 str인 so로 설정된다.

su -> su          // 1~3번 규칙에 의해 접두사인 su로 설정된다.

son -> son2       // 4-b번 규칙에 의해 cnt=2 이므로 son2로 설정된다

 

* 위의 규칙을 이용해 별칭을 정하면 두 개의 문자열이 같은 별칭을 가질 수도 있다.

   ex) "ab", "a", "a" 가 주어지는 경우, 각각 "a"(1~3번 규칙), "a"(4-a번 규칙), "a2"(4-b번 규칙)


입력

첫째 줄에 문자열 수 N(1 ~ 100,000)이 주어진다.

둘째 줄부터 N개의 줄에 10자 이하의 소문자 문자열이 주어진다.​ 


출력

주어진 순서대로 문자열의 별칭을 한 줄에 한개씩 출력한다.​ 


예제

9

son
sonny
song
so
su
son
s
son
s
s

sonn
song
so
su
son2
s
son3
s2

출처

teriusu

로그인해야 코드를 작성할 수 있어요.