정점이 9개 이하인 두 트리가 주어질 때, 두 트리를 잇는 전단사 대응을 골라 길이 K인 단순 사이클의 개수가 최대가 되도록 하는 값을 구한다.
어려움8백트래킹그래프조합론완전 탐색아직 제출이 없습니다시간 제한2초메모리 제한512 MB그래프 G에서 길이가 L≥3인 단순 사이클은 정점 순열 (v0,v1,…,vL−1)이다. v0,v1,…,vL−1은 서로 모두 다르고, 모든 0≤i≤L−1에 대해 vi와 v(i+1)modL을 잇는 간선이 G에 있다.
두 단순 사이클 X와 Y는, X를 회전하거나 뒤집은 다음 회전해서 Y를 만들 수 있으면 같은 사이클이다. 예를 들어 (1,2,3,4), (2,3,4,1), (3,2,1,4)는 모두 같은 사이클이다.
트리 두 개를 이어 붙여 그래프를 만든다. 두 트리는 모두 정점이 N개이고, 정점에는 0번부터 N−1번까지 번호가 매겨져 있다. 먼저 0부터 N−1까지의 수로 이루어진 순열 P를 하나 만든다. 그 다음 모든 0≤i≤N−1에 대해 첫 번째 트리의 i번 정점과 두 번째 트리의 P[i]번 정점을 간선으로 잇는다.
이렇게 만든 그래프에서 첫 번째 트리에 있던 i번 정점은 Ai로, 두 번째 트리에 있던 i번 정점은 Bi로 나타낸다.
P를 어떻게 고르는지에 따라 길이가 K인 단순 사이클의 개수가 달라진다. 두 트리와 K가 주어지면, 길이가 K인 단순 사이클의 개수가 가장 많아지도록 P를 골랐을 때 그 개수를 구하는 프로그램을 작성하시오.
첫째 줄에 N과 K가 주어진다. (1≤N≤9, 3≤K≤7)
둘째 줄부터 N개 줄에 첫 번째 트리의 정보가, 이어지는 N개 줄에 두 번째 트리의 정보가 주어진다. 트리는 인접 행렬로 주어진다. 각 줄은 길이가 N인 문자열이고, i번째 줄의 j번째 문자가 'X'이면 i번 정점과 j번 정점을 잇는 간선이 있다는 뜻이고, '-'이면 없다는 뜻이다.
첫째 줄에 주어진 두 트리를 이어 붙여 만들 수 있는 그래프에서 길이가 K인 단순 사이클 개수의 최댓값을 출력한다.