모두를 위한 정의

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

요약
k가 최대 20인 0/1 신뢰 행렬이 주어질 때 기사와 말 사이의 완전 매칭 수, 즉 행렬의 permanent를 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 비트 연산, 조합론
정답자
아직 제출이 없습니다

문제

아르데니아가 전쟁에 나선다. 이 명망 높은 부대는 정확히 기사 kk명과 말 kk마리로 이루어져 있다. 이들 사이에는 상호 신뢰 관계가 정해져 있어, 기사 ii가 말 jj를 신뢰한다고 하면 대칭적으로 말 jj도 기사 ii를 신뢰한다. 한 마리의 말은 임의의 수의 기사를 신뢰할 수 있고, 한 명의 기사도 임의의 수의 말을 신뢰할 수 있다.

전투를 치르기 전마다 부대는 하나의 배정을 만든다. 각 기사에게는 그 기사가 신뢰하는 말 한 마리가 주어지며, 서로 다른 두 기사에게 같은 말을 줄 수는 없다. 즉, 배정이란 신뢰 관계를 지키면서 kk명의 기사 전원과 kk마리의 말 전원을 일대일로 짝짓는 방법이다.

서로 다른 두 전투는 서로 다른 배정을 사용해야 하며, 부대는 유효한 서로 다른 배정 하나마다 전투를 한 번씩 치른다. 신뢰 관계가 주어질 때, 부대가 준비된 전투의 수를 구하여라.

입력

첫 번째 줄에 테스트 케이스의 수 ZZ (1≤Z≤1001 \le Z \le 100)가 주어진다.

각 테스트 케이스의 첫 줄에는 기사의 수 kk (1≤k≤201 \le k \le 20)가 주어지며, 이는 말의 수와 같다. 이어지는 kk개의 줄에는 각각 정확히 kk개의 문자가 주어지고, 각 문자는 0 또는 1이다. ii번째 줄의 jj번째 문자가 1이면 기사 ii가 말 jj를 신뢰하는 것이고, 0이면 신뢰하지 않는 것이다.

출력

각 테스트 케이스마다, 부대가 준비된 전투의 수, 즉 유효한 서로 다른 배정의 수를 한 줄에 하나의 정수로 출력한다. 이 값은 최대 20!20!이므로 항상 부호 있는 64비트 정수에 들어간다.

예제2

  1. 예제 1

    입력
    2
    2
    11
    11
    3
    110
    101
    111
    
    예상 출력
    2
    3
    
  2. 예제 2

    입력
    1
    4
    1111
    1111
    1111
    1111
    
    예상 출력
    24