세 팔 크레인
시간 제한1초메모리 제한128 MB
p, q, n이 주어질 때, 1번부터 n번 칸을 정확히 한 번씩 채우는 (x, x+p 또는 x+q, x+p+q) 배치 삼중항의 사전순 최소 수열을 구한다.
문제
세 팔 크레인이 컨테이너를 철도 화차에 싣는다. 화차에는 열차 앞쪽부터 번이 붙어 있고, 화차 한 대에는 컨테이너를 최대 한 개만 올릴 수 있다.
크레인은 두 상수 , 로 정해진다. 크레인은 한 번 움직일 때마다 창고에서 컨테이너 세 개를 가져와 번, 번, 번 화차에 올리거나, 번, 번, 번 화차에 올린다.
열차의 화차는 모두 대이고, 크레인은 앞쪽 대를 채워야 한다. 크레인 프로그램은 명령을 나열한 것이고, 명령 하나가 크레인의 움직임 한 번을 뜻한다. 명령은 를 만족하는 세 수 이며, 이고 는 또는 , 이다. 프로그램을 실행한 뒤 앞쪽 대에 컨테이너가 정확히 하나씩 놓여 있으면 그 프로그램은 올바르다. 번보다 뒤에 있는 화차는 비어 있어도 되고 컨테이너가 한 개 놓여 있어도 된다.
입력
첫째 줄에 크레인의 매개변수 , 와 채워야 하는 앞쪽 화차의 대수 이 공백 한 칸으로 구분되어 주어진다. 세 수는 모두 양의 정수이고, , 을 만족한다.
출력
올바른 프로그램 하나의 명령을 가 커지는 순서로 출력한다. 화차 한 대에는 컨테이너를 한 개만 올리므로 한 프로그램 안에서 두 명령의 는 서로 다르고, 이 순서는 유일하다.
올바른 프로그램은 여러 개일 수 있다. 이 순서로 적은 수열 을 사전순으로 비교해서 가장 앞서는 프로그램을 출력한다.
첫째 줄에 명령의 개수 을 출력한다. 다음 개 줄에는 명령마다 세 정수 , , 를 공백 한 칸으로 구분해 출력한다. 주어진 범위에서 올바른 프로그램은 항상 존재한다.