시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 512 MB86242329.487%

문제

현욱은 회사로부터 특수한 명령어를 이용해 주어진 데이터를 압축하는 프로그램을 작성하는 업무를 받게 됐다. 데이터는 길이가 $N$($1 \le N \le 10000$)인 0과 1로만 구성된 문자열로 표현되며, 현욱이 작성해야하는 프로그램은 아래 목록과 같은 명령어를 사용해서 작성할 수 있다.

  • Print c : $c$를 2로 나눈 나머지를 출력한다.($ 0 \le c \le 2 \cdot 10^5 $)
  • Print *p : ($p$번 메모리 셀의 값)을 2로 나눈 나머지를 출력한다($ 0 \le p \le 2 \cdot 10^5 $). *은 여러 번 붙일 수 있다. 즉, Print **p 의 경우 (($p$번 메모리 셀의 값)번 메모리 셀의 값)을 출력하는 방식이다. *은 최대 100개까지 붙일 수 있다.
  • Add a : $a$번 메모리 셀의 값을 1 증가시킨다($ 0 \le a \le 2 \cdot 10^5 $)
  • Write a b : $a$번 메모리 셀의 값을 $b$로 설정한다($ 0 \le a \le 2 \cdot 10^5, 0 \le b \le 10^5 $).
  • Start, End : Start가 나오는 라인부터 End가 나오는 라인까지의 명령어를 무한히 반복한다. Start와 End는 한 번씩만 쓸 수 있으며 Start 명령어는 반드시 End 명령어보다 먼저 나와야한다. 

명령어는 한 줄에 하나씩 작성하며 프로그램은 명령어의 맨 윗라인부터 순서대로 명령을 수행한다.  메모리 셀은 $0$번부터 $2 \cdot 10^5$번 셀까지 존재한다. 각 메모리 셀의 값은 맨 처음에 $0$으로 초기화되어 있다.

프로그램은 $N$ 글자를 출력한 경우, 명령어 실행 횟수가 $10^5$회를 넘어간 경우, 프로그램의 끝에 도달한 경우, 혹은 잘못된 명령어가 입력된 경우 종료한다. Start, End의 실행 횟수도 명령어 실행 횟수에 포함된다.

위 조건 하에서 입력으로 받은 데이터와 동일한 데이터를 출력하는 프로그램을 작성하려고 한다. 용량 문제로 명령어의 길이는 $2000$ 라인을 넘을 수 없다. 현욱을 도와 주어진 입력 데이터를 나타내는 프로그램을 작성해보자.

입력

첫 줄에 $N$이 주어진다($ 1 \le N \le 10000 $).

둘째 줄에 길이가 $N$인 0과 1로만 구성된 문자열이 주어진다.

출력

첫 줄에 사용한 명령어의 개수 $K$를 출력한다($ 1 \le K \le 2000 $).

둘째 줄부터 $K$줄에 걸쳐 입력으로 주어진 문자열을 생성할 수 있는 프로그램 명령어를 출력한다.

서브태스크 1 (77점)

$000...0111...1$ 형태의 입력만 주어진다.

서브태스크 2 (48점)

추가 제한 없음

예제 입력 1

3
011

예제 출력 1

3
Print 0
Print 1
Print 1

예제 입력 2

6
011001

예제 출력 2

10
Write 0 1
Write 1 0
Print *1
Print *0
Print **1
Print **0
Add 1
Write 0 0
Print *0
Print *1

예제 입력 3

6
010101

예제 출력 3

4
Start
Print 0
Print 1
End

명령어는 다음과 같은 순서대로 실행되며 이 때 명령어 수행 횟수는 11회가 된다.

  • Start
  • Print 0
  • Print 1
  • End
  • Start
  • Print 0
  • Print 1
  • End
  • Start
  • Print 0
  • Print 1

출처

Contest > BOJ User Contest > 소프트콘 > 제3회 소프트콘 F번

채점 및 기타 정보

  • 예제는 채점하지 않는다.