춤

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

요약
춤 동작의 나열이 다섯 가지 규칙을 지키는지 확인하고, 어긴 규칙 번호를 출력하며 잘못 놓인 dip은 대문자로 바꿉니다.
난이도

쉬움10점 중 3점

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

문제

창영이는 춤을 배우고 있다. 창영이가 추는 춤은 공백으로 구분된 여러 개의 스텝(step)을 한 줄로 나열한 것이며, 다음 다섯 가지 규칙을 지켜야 한다.

  1. dip은 다음 세 경우 중 하나에서만 출 수 있다.
    • jiggle을 춘 바로 다음에 (예: ... jiggle dip ...)
    • jiggle을 춘 다다음에 (예: ... jiggle stomp dip ...)
    • twirl을 추기 바로 직전에 (예: ... dip twirl ...)
  2. 모든 춤은 clap stomp clap으로 끝나야 한다.
  3. twirl을 한 번이라도 췄다면, hop도 한 번 이상 춰야 한다.
  4. 춤을 jiggle로 시작할 수 없다.
  5. dip을 반드시 한 번 이상 춰야 한다.

창영이가 춘 춤이 주어졌을 때, 위 규칙을 모두 지켰는지 판별하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄이며, 창영이가 춘 춤 하나가 주어진다. 한 춤은 최대 1000개의 스텝으로 이루어지고, 각 스텝은 소문자 알파벳으로만 이루어지며 최대 100글자이다. 입력은 파일의 끝(EOF)까지 계속된다.

출력

각 테스트 케이스마다 한 줄씩 출력한다.

  • 모든 규칙을 지켰다면 form ok: 를 출력한 뒤, 입력으로 주어진 춤을 그대로 출력한다.
  • 규칙을 정확히 하나 어겼다면 form error K: 를 출력한 뒤 춤을 출력한다. 여기서 K는 어긴 규칙의 번호이다.
  • 규칙을 두 개 이상 어겼다면 form errors K(1), K(2), ..., K(N-1) and K(N): 를 출력한 뒤 춤을 출력한다. 어긴 규칙 번호 K(i)는 오름차순으로 나열한다.

춤을 출력할 때, 1번 규칙을 어긴(잘못된 위치에서 춘) dip은 모두 대문자 DIP로 출력한다.

예제1

  1. 예제 1

    입력
    dip twirl hop jiggle hop hop clap stomp clap
    dip hop jiggle hop hop clap stomp clap
    dip twirl hop jiggle hop hop clap clap stomp
    jiggle dip twirl hop jiggle hop hop clap stomp clap
    jiggle dip
    jiggle
    dip twirl hop dip jiggle hop dip hop clap stomp clap
    
    예상 출력
    form ok: dip twirl hop jiggle hop hop clap stomp clap
    form error 1: DIP hop jiggle hop hop clap stomp clap
    form error 2: dip twirl hop jiggle hop hop clap clap stomp
    form error 4: jiggle dip twirl hop jiggle hop hop clap stomp clap
    form errors 2 and 4: jiggle dip
    form errors 2, 4 and 5: jiggle
    form error 1: dip twirl hop DIP jiggle hop dip hop clap stomp clap