변덕쟁이 청소기
시간 제한10초메모리 제한1024 MB
잊어버린 회전 방향을 정하고 각 이동 거리를 주어진 범위 안에서 골라 청소기가 (X, Y)에 도착하는 가장 작은 로그를 출력합니다.
문제
이치로는 프로그래밍 대회 상품으로 최신형 청소기를 받았다. 이 청소기는 집 안을 스스로 돌아다니며 청소한다. 집이 아주 넓어서 무한히 펼쳐진 2차원 평면으로 생각해도 된다. 두 축을 각각 축과 축이라고 하자. 축의 양의 방향을 바라볼 때 왼쪽이 축의 양의 방향이다.
청소기는 여러 동작을 순서대로 수행하며 청소한다. 한 동작은 회전과 주행으로 이루어진다. 청소기는 먼저 왼쪽이나 오른쪽으로 90도 회전하고, 그다음 바라보는 방향으로 정수 길이만큼 곧장 달린다. 하루가 끝나면 청소기는 그날의 동작 기록을 이치로에게 보고한다.
이 청소기는 사람과 비슷한 인공지능을 갖춘 탓에 사람처럼 잘 잊어버린다. 어떤 회전의 방향을 잊기도 하고, 어떤 주행의 길이를 대략적인 범위로만 기억하기도 한다. 그래도 제대로 동작한 척을 하려면 청소를 마친 뒤에 완전한 기록을 복원해야 한다.
청소기는 처음에 점 에서 축의 양의 방향을 바라보고 있었다. 청소를 마친 뒤 청소기의 위치 와 청소기가 기억하는 불완전한 기록이 주어진다. 다음 조건을 모두 만족하는 완전한 기록을 복원하자.
- 동작의 개수는 불완전한 기록과 같다.
- 번째 회전의 방향이 불완전한 기록에 남아 있으면, 복원한 기록의 번째 회전도 그 방향과 같다.
- 번째 주행의 길이는 불완전한 기록이 알려 주는 범위 안에 있다.
- 모든 동작을 마친 뒤 청소기는 에 있다.
청소를 마친 뒤 청소기가 바라보는 방향은 상관없다. 청소가 끝난 뒤에도 청소기는 자유롭게 회전할 수 있고, 다만 더 달리지는 못한다. 이치로는 기록의 형식과 마지막 위치만 확인하므로 청소기가 실제로 지나간 경로를 맞출 필요도 없다.
입력
첫째 줄에 정수 , , 가 주어진다. (, ) 은 불완전한 기록에 들어 있는 동작의 개수이고, 는 청소를 마친 뒤 청소기의 위치이다.
다음 개의 줄 중 번째 줄에는 문자 와 정수 , 가 공백으로 구분되어 주어진다. () 는 번째 회전의 방향을 나타내며, L은 왼쪽, R은 오른쪽, ?는 방향을 기억하지 못한다는 뜻이다. 와 는 번째 주행 길이의 하한과 상한이다.
출력
조건을 만족하는 기록이 하나도 없으면 -1만 출력한다.
기록이 있으면 첫째 줄에 동작의 개수 을 출력하고, 이어지는 개의 줄 중 번째 줄에 번째 회전의 방향과 번째 주행의 길이를 공백으로 구분해 출력한다. 왼쪽 회전은 L, 오른쪽 회전은 R로 적는다.
조건을 만족하는 기록이 여러 개이면 다음 순서로 가장 작은 기록 하나를 출력한다. 먼저 첫 번째 회전의 방향을 비교하고, 이때 L이 R보다 작다. 방향이 같으면 첫 번째 주행의 길이를 정수로 비교한다. 길이도 같으면 두 번째 회전의 방향을 비교하고, 이런 식으로 마지막 동작까지 계속한다.