춤
시간 제한1초메모리 제한128 MB
춤 동작의 나열이 다섯 가지 규칙을 지키는지 확인하고, 어긴 규칙 번호를 출력하며 잘못 놓인 dip은 대문자로 바꿉니다.
문제
창영이는 춤을 배우고 있다. 창영이가 추는 춤은 공백으로 구분된 여러 개의 스텝(step)을 한 줄로 나열한 것이며, 다음 다섯 가지 규칙을 지켜야 한다.
dip은 다음 세 경우 중 하나에서만 출 수 있다.jiggle을 춘 바로 다음에 (예:... jiggle dip ...)jiggle을 춘 다다음에 (예:... jiggle stomp dip ...)twirl을 추기 바로 직전에 (예:... dip twirl ...)
- 모든 춤은
clap stomp clap으로 끝나야 한다. twirl을 한 번이라도 췄다면,hop도 한 번 이상 춰야 한다.- 춤을
jiggle로 시작할 수 없다. 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로 출력한다.