10행 격자에서 장애물을 피해 배리가 N개의 열을 지나가도록, 화면을 누르는 일정 중 사전순으로 가장 작은 것을 구한다.
보통6동적 계획법그리디배열시뮬레이션면접 대비아직 제출이 없습니다시간 제한1초메모리 제한64 MB미르코가 생일 선물로 새 휴대폰을 받았다. 요즘 아이들이 다 그렇듯 미르코도 인기 있는 모바일 게임을 전부 내려받았고, 그중 하나가 주인공이 제트팩을 메고 달리는 게임이다.
이 게임의 주인공 배리는 세로 10칸, 가로 N칸인 격자 모양 벌판을 달린다. 배리는 맨 왼쪽 아래 칸에서 출발해 1초에 한 칸씩 오른쪽으로 달리며, 앞을 막는 장애물을 피해야 한다.
미르코가 화면을 누르고 있는 동안 배리는 제트팩을 켜고 1초에 한 줄씩 위로 올라간다. 오른쪽으로도 계속 이동하므로 45도 대각선으로 올라가는 셈이다. 맨 윗줄에 닿으면 미르코가 손을 뗄 때까지 맨 윗줄을 따라 오른쪽으로만 달린다. 미르코가 화면에서 손을 떼면 배리는 1초에 한 줄씩 떨어지고, 맨 아랫줄에 닿으면 그 줄을 따라 오른쪽으로만 달린다.
규칙을 정확히 쓰면 이렇다. 0부터 세어 t번째 초에 배리는 t번 열에서 t+1번 열로 이동한다. 그 1초 동안 화면이 눌려 있으면 한 줄 위로 올라가고, 이미 맨 윗줄이면 그대로 있는다. 눌려 있지 않으면 한 줄 아래로 내려가고, 이미 맨 아랫줄이면 그대로 있는다. 배리가 지나는 모든 칸에는 장애물이 없어야 한다.
미르코는 게임을 시작한 지 얼마 되지 않아 아직 서툴다. 벌판의 모양이 주어질 때, 배리가 N개의 열을 모두 지나도록 미르코가 화면을 언제 누르고 있어야 하는지 구하자.
첫째 줄에 벌판의 가로 길이 N이 주어진다 (1≤N≤105).
다음 10개의 줄에는 각각 N개의 문자가 주어진다. 문자 X는 장애물이 있는 칸, .은 지나갈 수 있는 칸이다. 이 중 첫 줄이 벌판의 맨 윗줄이고 마지막 줄이 맨 아랫줄이다. 배리는 맨 아랫줄의 첫 번째 칸에서 출발하며, 그 칸에는 장애물이 없다. 게임을 끝내는 방법이 적어도 하나 있는 입력만 주어진다.
가능한 조작 방법이 여러 가지일 수 있으므로 그중 하나만 정해서 출력한다. 조작 방법을 길이 N−1인 문자열 b로 나타내자. 0부터 세어 b의 t번째 문자는 t번째 초에 화면이 눌려 있으면 1, 아니면 0이다. 배리가 게임을 끝낼 수 있는 b 중에서 사전순으로 가장 앞서는 것을 출력한다. 다시 말해 매 초마다, 그 뒤로 게임을 끝낼 방법이 남아 있는 한 화면에서 손을 뗀다.
첫째 줄에 미르코가 화면을 누르는 횟수 P를 출력한다. 이어지는 P개의 줄에는 각 조작을 두 정수 ti와 xi로 출력한다. ti는 화면을 누르기 시작하는 초, xi는 화면을 누르고 있는 시간이다. 이는 b에서 1이 연속으로 이어지는 구간을 시간 순서대로 적은 것과 같으므로 ti+xi≤ti+1과 ti<N이 성립한다. N=1이면 첫째 줄에 0만 출력한다.