눈에는 눈 (An I for an Eye)
시간 제한2초메모리 제한512 MB
고정된 약어 표에 따라 각 줄을 왼쪽에서 오른쪽으로 훑으며, 같은 위치에서는 가장 긴 것을 골라 치환하고 대소문자도 맞춘다.
문제
Ken은 요즘 Twitter에서 글자 수 제한을 지키는 데 애를 먹고 있어서, 자주 쓰이는 철자 조합을 정해진 약어로 줄여 주는 간단한 프런트엔드 프로그램을 만들기로 했다. 약어는 아래 표와 같다.
Ken이 프로그램을 만들려는 순간, 자신의 컴퓨터 지식이란 게 ... 음 ... Twitter를 쓰는 정도라는 걸 깨닫는다. 그는 도움을 줄 사람을 찾고 있다. r u th@ some1?
입력
입력의 첫 줄에는 처리할 텍스트 줄의 수 n이 주어진다. 그다음 n개의 줄이 주어진다. 각 줄은 영숫자와 공백으로만 이루어지고, 공백이 아닌 문자가 최소 하나 있다. 각 줄의 길이는 최대 200자이다.
출력
각 줄에 알맞은 치환을 적용해 출력한다. 치환은 단어 안에서도 이루어진다. 예를 들어 that은 th@로 바뀐다. 두 철자 조합이 겹치면(예: baton의 at과 to) 먼저 나오는 것만 치환한다(이 경우 결과는 b@on). 두 철자 조합이 같은 위치에서 시작하면(예: been의 be와 bee) 더 긴 것을 치환한다(이 경우 결과는 bn). 철자 조합이 대문자로 시작하면 약어도 (해당되는 경우) 대문자로 쓴다. 마지막으로, 한 번 치환된 문자는 이후 다른 치환의 일부가 될 수 없다. 예를 들어 입력이 oweh라면 먼저 owe를 o로 치환해 oh를 얻는다. 이때 oh는 치환된 문자를 포함하므로 oh를 o로 다시 치환하지 않는다.