세 팔 크레인이 컨테이너를 철도 화차에 싣는다. 화차에는 열차 앞쪽부터 1,2,…번이 붙어 있고, 화차 한 대에는 컨테이너를 최대 한 개만 올릴 수 있다.
크레인은 두 상수 p≥1, q≥1로 정해진다. 크레인은 한 번 움직일 때마다 창고에서 컨테이너 세 개를 가져와 i번, i+p번, i+p+q번 화차에 올리거나, i번, i+q번, i+p+q번 화차에 올린다.
열차의 화차는 모두 n+p+q대이고, 크레인은 앞쪽 n대를 채워야 한다. 크레인 프로그램은 명령을 나열한 것이고, 명령 하나가 크레인의 움직임 한 번을 뜻한다. 명령은 1≤x<y<z≤n+p+q를 만족하는 세 수 (x,y,z)이며, x≤n이고 y는 x+p 또는 x+q, z=x+p+q이다. 프로그램을 실행한 뒤 앞쪽 n대에 컨테이너가 정확히 하나씩 놓여 있으면 그 프로그램은 올바르다. n번보다 뒤에 있는 화차는 비어 있어도 되고 컨테이너가 한 개 놓여 있어도 된다.
첫째 줄에 크레인의 매개변수 p, q와 채워야 하는 앞쪽 화차의 대수 n이 공백 한 칸으로 구분되어 주어진다. 세 수는 모두 양의 정수이고, 1≤n≤300000, 2≤p+q≤60000을 만족한다.
올바른 프로그램 하나의 명령을 x가 커지는 순서로 출력한다. 화차 한 대에는 컨테이너를 한 개만 올리므로 한 프로그램 안에서 두 명령의 x는 서로 다르고, 이 순서는 유일하다.
올바른 프로그램은 여러 개일 수 있다. 이 순서로 적은 수열 x1,y1,z1,x2,y2,z2,…을 사전순으로 비교해서 가장 앞서는 프로그램을 출력한다.
첫째 줄에 명령의 개수 m을 출력한다. 다음 m개 줄에는 명령마다 세 정수 x, y, z를 공백 한 칸으로 구분해 출력한다. 주어진 범위에서 올바른 프로그램은 항상 존재한다.