옛날 조판은 어떻게 했을까?

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

요약
과거 활판 인쇄 방식대로 특정 알파벳 조합을 합자 코드로 바꾸고, 여러 규칙에 따라 단어별로 장형 s와 단형 s를 구분해 출력하는 문제입니다.
난이도

보통10점 중 7점

유형
문자열, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

디지털 조판이 없던 시절, 조판은 숙련공만이 다룰 수 있는 기술이자 예술이었다. 지면을 아끼고 글자를 더 아름답게 보이게 하려고 특정 문자 조합을 하나의 글자로 합쳐 찍었는데, 이런 문자를 ligature라고 한다. 예를 들어 a-e의 ligature는 'æ'이고, f-i의 ligature는 'fi'이다. 가능한 ligature와 출력 코드는 힌트의 표에 정리되어 있다.

소문자 s를 찍는 방법에는 "long s"와 "short s" 두 가지가 있었다. 오늘날에는 short s 형태만 쓰인다. 어떤 s를 써야 하는지는 다음 규칙으로 결정한다.

  1. 단어의 끝에 있는 s, 또는 하이픈(-)이나 어퍼스트로피(`)처럼 단어 안의 구두점 바로 앞에 있는 s는 short s로 쓴다.
    • 예: programs, ſucceſs, hocus-pocus, revis'd
  2. f, b, k 바로 앞에 있는 s는 short s로 쓴다.
    • 예: transfer, husband, ask, ſucceſsful
  3. ss로 끝나는 단어 뒤에 s로 시작하는 단어가 합쳐져 한 단어 안에 sss가 생긴 경우, 가운데 s는 short s로 쓰고 나머지 s는 long s로 쓴다.
    • 예: croſsſtitch, croſsſtaff
  4. 위 경우에 해당하지 않는 s는 모두 long s로 쓴다.

여기서 "단어"는 "식별자"와 다르다. 식별자는 _나 $ 같은 구두점을 포함할 수 있지만, 단어는 문자만으로 이루어진 연속 구간이다. 따라서 radius3이나 adios_amigo 같은 식별자는 radiuſ3, adioſ_amigo가 아니라 radius3, adios_amigo로 조판된다.

입력

첫째 줄에 테스트 개수 P (1 <= P <= 1000)가 주어진다.

이후 P개의 줄이 주어지며, 각 줄은 길이가 1000자 이하인 문자열이다. 문자열은 알파벳 대문자, 알파벳 소문자, 숫자, 공백, 그리고 특수문자 .,"'$;:?()-<>=!로만 이루어진다.

출력

각 테스트 문자열을 적절한 ligature와 long s 코드로 바꾸어 출력한다. short s는 그대로 s로 출력한다. AE와 Ae는 [AE], OE와 Oe는 [OE]로 출력하고, ae와 oe는 각각 [ae], [oe]로 출력한다. 다른 조합은 힌트 표의 코드에 따른다.

힌트

입력심볼출력 코드
AE, AeÆ[AE]
aeæ[ae]
OE, OeŒ[OE]
oeœ[oe]
ct[ct]
ffff[ff]
fifi[fi]
flfl[fl]
ffiffi[ffi]
fflffl[ffl]
s (short)ss
s (long)ſ[longs]
si[longsi]
sh[longsh]
sl[longsl]
ss[longss]
stſt[longst]
ssi[longssi]

long s와 short s는 섞여 나올 수 있다. 예를 들어 crossstitch는 cro[longs]s[longst]itch가 된다. cro[longs]s[longs]titch는 올바른 출력이 아니다.

예제1

  1. 예제 1

    입력
    3
    Last night, we went to see
    "Oedipus Rex" at the
    AEgyptian's theater.
    
    예상 출력
    La[longst] night, we went to [longs]ee 
    "[OE]dipus Rex" at the 
    [AE]gyptian's theater.