단순 사이클의 개수

정점이 9개 이하인 두 트리가 주어질 때, 두 트리를 잇는 전단사 대응을 골라 길이 K인 단순 사이클의 개수가 최대가 되도록 하는 값을 구한다.

어려움8백트래킹그래프조합론완전 탐색아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

그래프 GG에서 길이가 L3L \ge 3인 단순 사이클은 정점 순열 (v0,v1,,vL1)(v_0, v_1, \dots, v_{L-1})이다. v0,v1,,vL1v_0, v_1, \dots, v_{L-1}은 서로 모두 다르고, 모든 0iL10 \le i \le L-1에 대해 viv_iv(i+1)modLv_{(i+1) \bmod L}을 잇는 간선이 GG에 있다.

두 단순 사이클 XXYY는, XX를 회전하거나 뒤집은 다음 회전해서 YY를 만들 수 있으면 같은 사이클이다. 예를 들어 (1,2,3,4)(1, 2, 3, 4), (2,3,4,1)(2, 3, 4, 1), (3,2,1,4)(3, 2, 1, 4)는 모두 같은 사이클이다.

트리 두 개를 이어 붙여 그래프를 만든다. 두 트리는 모두 정점이 NN개이고, 정점에는 0번부터 N1N-1번까지 번호가 매겨져 있다. 먼저 0부터 N1N-1까지의 수로 이루어진 순열 PP를 하나 만든다. 그 다음 모든 0iN10 \le i \le N-1에 대해 첫 번째 트리의 ii번 정점과 두 번째 트리의 P[i]P[i]번 정점을 간선으로 잇는다.

이렇게 만든 그래프에서 첫 번째 트리에 있던 ii번 정점은 AiA_i로, 두 번째 트리에 있던 ii번 정점은 BiB_i로 나타낸다.

PP를 어떻게 고르는지에 따라 길이가 KK인 단순 사이클의 개수가 달라진다. 두 트리와 KK가 주어지면, 길이가 KK인 단순 사이클의 개수가 가장 많아지도록 PP를 골랐을 때 그 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NNKK가 주어진다. (1N91 \le N \le 9, 3K73 \le K \le 7)

둘째 줄부터 NN개 줄에 첫 번째 트리의 정보가, 이어지는 NN개 줄에 두 번째 트리의 정보가 주어진다. 트리는 인접 행렬로 주어진다. 각 줄은 길이가 NN인 문자열이고, ii번째 줄의 jj번째 문자가 'X'이면 ii번 정점과 jj번 정점을 잇는 간선이 있다는 뜻이고, '-'이면 없다는 뜻이다.

출력

첫째 줄에 주어진 두 트리를 이어 붙여 만들 수 있는 그래프에서 길이가 KK인 단순 사이클 개수의 최댓값을 출력한다.