페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#1811

Drawing ladder 1s 256MB

문제

이브룸에서 밤을 새던 N (2≤N≤16)명은 야식 내기 사다리를 그리기로 하였다. 

화이트보드에 그렸으면 편했을 것을, 전산과답게 완전히 공평한 결과를 보장한다며 

사다리를 만들고 결과를 그려주는 프로그램을 사용하기로 하였다.

 

이 프로그램은 콘솔에서 ASCII 문자들로 사다리를 그린다. 

사다리의 세로선과 가로선은 문자를 세로 또는 가로로 나열함으로써 그릴 수 있다. 

두 세로선 사이의 간격은 일정하지 않지만, 세로 방향 길이는 같으며 사다리 중간이 끊어진다거나 하는 경우는 없다. 

역시 전산학과답게 이 사다리에 지나간 흔적을 "[0-9][A-F]"로 표현되는 16진수를 차례로 사용하여 나타내기로 하였다. 

마침 사람의 수도 적당하였다.

 

이 때 난수 생성기에서 발생된 1부터 N까지의 수를 담은 순열에 따라 순서대로 사다리를 타며 

자신에게 할당된 문자로 사다리를 덮어 씌운다. 

그러다 보니 최종 결과물 사다리는 아래와 같이 생겼다.

 

 

 

위에서 보듯 사다리 그림은 R행 C열의 ASCII 문자들이다. "." 문자가 나타내는 것은 빈 칸이다. 

임의의 두 가로선이 바로 가로 방향으로 인접해 있거나, 두 세로선이 인접해 있는 경우는 없다. 

단 두 가로선이 세로 방향으로 인접해 있을 수는 있다. 또한 맨 첫 행과 맨 마지막 행에는 가로선이 그어지지 않는다.

 

CS501 멤버들은 결과 사다리만을 보고 사다리를 탄 순서를 알아내려고 했다. 위 그림대로라면 아마 (1, 2, 0)의 순서로 그려졌을 것이다. 

그런데 위의 경우보다 좀 더 복잡한 경우들을 고려해 보니 항상 결과가 유일하지는 않았다. 

모두 몇 가지의 순열이 사다리 탄 순서로 가능하겠는가? 단, 사다리 결과로 불가능한 것은 고려하지 않는다.

 


입력

첫 행에는 테스트 케이스의 수 T가 주어진다. 각 테스트 케이스의 첫 행은 N, R (3≤R≤30), C (3≤C≤60)로 구성된다. 다음 R 개의 행에 걸쳐 사다리 그림을 나타내는 문자열들이 주어진다. 이 문자열에는 "."와 16진수 문자들만 존재한다.


출력

테스트 케이스 하나당 한 행씩 순서대로 가능한 사다리 탄 순서의 수를 출력한다.


예제

3

3 11 7
0...1.2
0...1.2
00000.2
1...0.2
1...0.2
1...0.2
1...000
1...2.0
22222.0
2...1.0
2...1.0
2 3 3
0.1
0.1
0.1
2 4 3
0.1
000
000
0.1
1

2
1
로그인해야 코드를 작성할 수 있어요.