행렬 키패드

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

요약
눌린 행과 열의 AND로 기록된 이진 격자에서 가능한 모든 버튼 조합을 따져 각 칸이 눌리지 않는지, 항상 눌리는지, 경우에 따라 달라지는지 판정합니다.
난이도

보통10점 중 5점

유형
행렬, 구현
정답자
아직 제출이 없습니다

문제

행렬 키패드는 버튼을 r×cr \times c 격자로 배치한 장치다. 행마다 배선이 하나, 열마다 배선이 하나 있고, 이 배선은 핀으로 노출되어 더 큰 회로에 연결된다.

ii행 jj열의 버튼을 누르면 ii행 배선과 jj열 배선에 전류가 흐른다. 버튼을 하나만 누른 상태라면 행 배선과 열 배선을 차례로 검사해서 어느 버튼인지 알아낼 수 있다.

여러 버튼을 동시에 누르면 눌린 버튼을 항상 알아낼 수는 없다. 배선마다 알 수 있는 것은 그 배선 위의 버튼 중 하나 이상이 눌렸는지 여부뿐이다.

키패드를 읽는 소프트웨어는 엉성하게 만들어져 있다. 이 소프트웨어는 키패드를 검사한 뒤 0과 1로 이루어진 r×cr \times c 격자에 결과를 저장한다. ii행 jj열의 값은 ii행에 눌린 버튼이 하나 이상 있고 jj열에도 눌린 버튼이 하나 이상 있으면 1이다. 이때 두 버튼이 같을 필요는 없다. 그렇지 않으면 이 자리의 값은 0이다.

이런 격자에서 알아낼 수 있는 정보를 최대한 뽑아내자. 각 버튼이 반드시 눌린 버튼인지, 반드시 눌리지 않은 버튼인지 판정한다.

입력

첫 줄에 테스트 케이스의 수 TT (1≤T≤2001 \le T \le 200)가 주어진다.

각 테스트 케이스의 첫 줄에는 버튼 행의 수 rr과 열의 수 cc (1≤r≤101 \le r \le 10, 1≤c≤101 \le c \le 10)가 주어진다. 이어지는 rr개의 줄에 소프트웨어가 저장한 격자가 주어진다. ii번째 줄은 0 또는 1로 이루어진 길이 cc의 문자열이며, 문자 사이에 공백은 없다.

출력

각 테스트 케이스마다 다음을 출력한다.

주어진 격자를 만들어 내는 버튼 누름 조합이 하나도 없으면 impossible만 적힌 줄을 출력한다.

그렇지 않으면 길이가 cc인 문자열 rr줄을 출력한다. ii행 jj열의 문자는 다음과 같다.

  • 격자를 만들어 내는 어떤 조합에서도 ii행 jj열 버튼이 눌리지 않으면 N
  • 격자를 만들어 내는 모든 조합에서 ii행 jj열 버튼이 눌리면 P
  • 일부 조합에서만 ii행 jj열 버튼이 눌리면 I

각 테스트 케이스의 마지막 줄 다음에는 하이픈 10개로 이루어진 ----------을 한 줄 출력한다.

예제2

  1. 예제 1

    입력
    3
    4 3
    110
    000
    110
    000
    2 3
    101
    000
    2 2
    10
    01
    
    예상 출력
    IIN
    NNN
    IIN
    NNN
    ----------
    PNP
    NNN
    ----------
    impossible
    ----------
    
  2. 예제 2

    입력
    2
    1 1
    0
    1 1
    1
    
    예상 출력
    N
    ----------
    P
    ----------