아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

마법 스위치

시간 제한8초메모리 제한512 MB

요약
3행 보드의 왼쪽 끝에서 오른쪽 끝까지 토큰이 이동하도록 26개 색상 스위치의 누름 여부를 정합니다.
난이도

어려움10점 중 8점

유형
그래프, DFS, 위상 정렬
정답자
아직 제출이 없습니다

문제

정사각형 칸으로 나뉜 직사각형 판이 있다. 행은 33개, 열은 3M+13M + 1개이며 MM은 양의 정수다. 행에는 위에서 아래로 11부터 33까지, 열에는 왼쪽에서 오른쪽으로 11부터 3M+13M + 1까지 번호를 붙인다. ii행 jj열의 칸을 (i,j)(i, j)로 쓴다.

각 칸은 바닥이거나 벽이다. 열 번호가 3k−13k - 1 또는 3k3k인 칸, 즉 2,3,5,6,…,3M−1,3M2, 3, 5, 6, \ldots, 3M - 1, 3M열의 칸에는 모두 색이 칠해져 있다(k=1,2,…,Mk = 1, 2, \ldots, M). 색은 2626가지이고 11번부터 2626번까지 번호가 붙어 있다. 나머지 칸, 즉 1,4,7,…,3M+11, 4, 7, \ldots, 3M + 1열의 칸에는 색이 칠해져 있지 않으며 모두 바닥이다.

이 판에서 다음 놀이를 한다. 먼저 (2,1)(2, 1)에 말을 놓는다. 그다음 말을 인접한 바닥 칸으로 계속 옮긴다. 두 칸이 변을 맞대고 있으면 인접하다고 한다. 벽 칸이나 판 밖으로는 말을 옮길 수 없다. 목표는 말을 (2,3M+1)(2, 3M + 1)로 옮기는 것이다.

이 놀이에서는 마법 스위치 2626개를 쓸 수 있다. 스위치에도 11번부터 2626번까지 번호가 붙어 있고, xx번 스위치는 xx번 색에 대응한다. xx번 스위치를 누르면 xx번 색이 칠해진 바닥 칸은 모두 벽이 되고 xx번 색이 칠해진 벽 칸은 모두 바닥이 된다. 두 변화는 동시에 일어난다.

스위치는 말을 움직이기 시작하기 전에만 누를 수 있다. 목표를 이룰 수 있게 하는 스위치 집합이 있는지 판정하고, 있으면 그런 집합 하나를 구하여라.

입력

입력은 최대 130130개의 데이터 집합으로 이루어진다. 각 데이터 집합의 첫 줄에는 정수 MM(1≤M≤10001 \le M \le 1000)이 주어진다. 이어지는 세 줄에는 각각 3M+13M + 1개의 문자가 주어지고, 이 세 줄이 판을 나타낸다. 그중 ii번째 줄의 jj번째 문자는 칸 (i,j)(i, j)의 정보를 다음과 같이 나타낸다.

  • xx번째 대문자는 칸 (i,j)(i, j)에 xx번 색이 칠해져 있고 이 칸이 처음에 바닥이라는 뜻이다.
  • xx번째 소문자는 칸 (i,j)(i, j)에 xx번 색이 칠해져 있고 이 칸이 처음에 벽이라는 뜻이다.
  • 마침표(.)는 칸 (i,j)(i, j)에 색이 칠해져 있지 않다는 뜻이며, 이 칸은 바닥이다.

문자가 마침표인 것은 jj가 1,4,7,…,3M+11, 4, 7, \ldots, 3M + 1 중 하나일 때, 그리고 그때뿐이다. 입력의 끝은 00 하나만 있는 줄로 나타낸다.

출력

각 데이터 집합마다 한 줄을 출력한다. 어떤 스위치 집합으로도 목표를 이룰 수 없으면 -1을 출력한다. 그렇지 않으면 누르는 스위치 집합을 다음 형식으로 출력한다.

n s1 s2 ... sn

nn은 누르는 스위치의 개수이고, s1,s2,…,sns_1, s_2, \ldots, s_n은 누르는 스위치에 대응하는 대문자다. xx번째 대문자가 xx번 스위치를 나타낸다. 누를 스위치가 하나도 없으면 n=0n = 0이며, 이때는 00 하나만 있는 줄을 출력한다.

목표를 이루는 스위치 집합은 여러 개일 수 있다. 그중 다음 방법으로 정한 집합 하나만 출력한다. 11번 스위치부터 2626번 스위치까지 차례로 누를지 정한다. 앞에서 정한 결정을 그대로 두고, 지금 보는 스위치를 누르지 않아도 뒤에 남은 스위치를 적절히 골라 목표를 이룰 수 있으면 누르지 않는다. 그런 방법이 없을 때만 누른다. 이렇게 정해진 대문자를 알파벳 순서로 공백 하나씩 띄어 출력한다.

예제2

  1. 예제 1

    입력
    3
    .aa.cA.Cc.
    .bb.Bb.AC.
    .cc.ac.Ab.
    1
    .Xx.
    .Yy.
    .Zz.
    6
    .Aj.fA.aW.zA.Jf.Gz.
    .gW.GW.Fw.ZJ.AG.JW.
    .bZ.jZ.Ga.Fj.gF.Za.
    9
    .ab.gh.mn.st.yz.EF.KL.QR.WA.
    .cd.ij.op.uv.AB.GH.MN.ST.XB.
    .ef.kl.qr.wx.CD.IJ.OP.UV.yz.
    2
    .AC.Mo.
    .IC.PC.
    .oA.CM.
    20
    .QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.qb.
    .qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.qb.
    .QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.QB.qb.
    0
    
    예상 출력
    2 B C
    -1
    3 A G J
    10 E F K L Q R W X Y Z
    0
    2 B Q
    
  2. 예제 2

    입력
    1
    .AA.
    .bb.
    .CC.
    1
    .aa.
    .aa.
    .aa.
    2
    .Ab.Ba.
    .bA.aB.
    .Ba.Ab.
    1
    .Aa.
    .Aa.
    .Aa.
    0
    
    예상 출력
    0
    1 A
    1 B
    -1