아즈텍 다이아몬드

시간 제한1초메모리 제한128 MB

요약
아즈텍 다이아몬드 도미노 타일링이 주어질 때, 2x2 회전만으로 모든 벽돌을 세로로 만드는 최단 순서를 사전순으로 가장 앞서게 구한다.
난이도

어려움10점 중 8점

유형
그리디, 시뮬레이션, 구현, 배열
정답자
아직 제출이 없습니다

문제

재민이는 1×21 \times 2 벽돌을 빈틈없이 깔아 만든 마름모 모양의 고대 문양을 발견했다.

크기가 NN인 문양은 2N2N행 2N2N열 격자 안에 놓인다. 위에서 ii번째 행에 대해 k=min⁡(i,2N+1−i)k = \min(i, 2N+1-i)라고 하면, 그 행의 칸은 왼쪽에서 N−k+1N-k+1번째 열부터 N+kN+k번째 열까지 2k2k개다. 문양의 칸은 모두 벽돌 하나로 덮여 있다.

가로 벽돌과 세로 벽돌이 불규칙하게 놓여 있는 것이 마음에 안 들었던 재민이는 벽돌을 모두 세로로 만들려고 한다. 재민이는 손이 작아서 한 손으로 벽돌을 들 수 없고, 두 손 사이에 벽돌을 끼워서 두 개를 들 수는 있다. 그래서 벽돌 두 개가 정확히 덮는 2×22 \times 2 정사각형을 하나 골라 9090도 회전시키는 작업만 할 수 있다.

회전 한 번은 위아래로 놓인 가로 벽돌 두 개를 좌우로 놓인 세로 벽돌 두 개로 바꾸거나, 그 반대로 바꾼다.

프로그래밍 대회가 곧 시작하니 여기에 시간을 많이 쓸 수는 없다. 재민이를 도와주자.

입력

첫째 줄에 문양의 크기 NN이 주어진다. NN은 11 이상 100100 이하다.

다음 2N2N개 줄에는 문양의 각 행을 나타내는 길이 2N2N의 문자열이 주어진다. .은 문양 바깥의 빈 칸, L과 R은 가로 벽돌의 왼쪽 칸과 오른쪽 칸, U와 D는 세로 벽돌의 위쪽 칸과 아래쪽 칸이다.

출력

첫째 줄에 벽돌을 모두 세로로 만드는 데 필요한 회전의 최소 횟수 DD를 출력한다. 다음 DD개 줄에는 회전할 2×22 \times 2 정사각형의 왼쪽 위 칸의 행 번호와 열 번호를 회전하는 순서대로 출력한다. 맨 위 행과 맨 왼쪽 열의 번호는 11이다.

회전 횟수가 DD인 방법이 여러 가지면, 수열 r1,c1,r2,c2,…,rD,cDr_1, c_1, r_2, c_2, \ldots, r_D, c_D를 사전순으로 비교해 가장 앞서는 것 하나만 출력한다. 입력 조건을 만족하는 모든 입력에 대해 답의 존재가 보장된다.

예제2

  1. 예제 1

    입력
    3
    ..UU..
    .UDDU.
    UDLRDU
    DUULRD
    .DDLR.
    ..LR..
    
    예상 출력
    4
    4 4
    4 3
    3 3
    5 3
    
  2. 예제 2

    입력
    2
    .UU.
    UDDU
    DUUD
    .DD.
    
    예상 출력
    0