그래프 색칠 2
시간 제한2초메모리 제한512 MB
정점이 18개 이하인 그래프에서 공집합이 아닌 모든 부분집합의 색칠수를 구한 뒤 하나의 해시값으로 접어 출력한다.
문제
개의 정점이 부터 까지 번호가 붙은 무방향 그래프가 주어진다. 정점 집합의 공집합이 아닌 부분집합은 당연히 개이다. 공집합이 아닌 부분집합 의 적절한 색칠은 의 각 정점에 색을 부여하되, 안에서 같은 색을 가진 두 정점이 간선으로 직접 연결되지 않도록 하는 방법이다. 적절한 색칠에서 서로 다른 색을 가지 사용했다고 하자. 부분집합 의 색칠수는 의 모든 적절한 색칠 중 가능한 의 최솟값이다.
이제 개 정점의 공집합이 아닌 모든 부분집합의 색칠수를 계산해야 한다.
입력
첫째 줄에 정수 가 주어진다. 그다음 개의 테스트 케이스가 이어진다.
각 테스트 케이스의 첫째 줄에는 정수 이 주어진다. 그다음 개의 줄에는 각각 '0'과 '1'로 이루어진 문자열이 주어진다. 이고 일 때, 번째 줄의 번째 문자가 '1'이면 정점 와 가 간선으로 직접 연결되어 있고, 그렇지 않으면 연결되어 있지 않다.
번째 줄의 번째 문자는 항상 '0'이다. 번째 줄의 번째 문자는 항상 번째 줄의 번째 문자와 같다.
모든 테스트 케이스에 대해 이다. 인 테스트 케이스는 개 이하이고, 인 테스트 케이스는 개 이하이며, 인 테스트 케이스는 개 이하이다.
출력
각 테스트 케이스마다 정수를 한 줄에 하나씩 출력한다. 이 정수는 다음과 같이 정해진다. 부분집합 의 식별 번호를 로 정의한다. 의 색칠수를 라 하자. 다음 값을 출력해야 한다.
힌트
첫 번째 테스트 케이스에서 이다.