단순 사이클의 개수
시간 제한2초메모리 제한512 MB
정점이 9개 이하인 두 트리가 주어질 때, 두 트리를 잇는 전단사 대응을 골라 길이 K인 단순 사이클의 개수가 최대가 되도록 하는 값을 구한다.
문제
그래프 에서 길이가 인 단순 사이클은 정점 순열 이다. 은 서로 모두 다르고, 모든 에 대해 와 을 잇는 간선이 에 있다.
두 단순 사이클 와 는, 를 회전하거나 뒤집은 다음 회전해서 를 만들 수 있으면 같은 사이클이다. 예를 들어 , , 는 모두 같은 사이클이다.
트리 두 개를 이어 붙여 그래프를 만든다. 두 트리는 모두 정점이 개이고, 정점에는 0번부터 번까지 번호가 매겨져 있다. 먼저 0부터 까지의 수로 이루어진 순열 를 하나 만든다. 그 다음 모든 에 대해 첫 번째 트리의 번 정점과 두 번째 트리의 번 정점을 간선으로 잇는다.
이렇게 만든 그래프에서 첫 번째 트리에 있던 번 정점은 로, 두 번째 트리에 있던 번 정점은 로 나타낸다.
를 어떻게 고르는지에 따라 길이가 인 단순 사이클의 개수가 달라진다. 두 트리와 가 주어지면, 길이가 인 단순 사이클의 개수가 가장 많아지도록 를 골랐을 때 그 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 과 가 주어진다. (, )
둘째 줄부터 개 줄에 첫 번째 트리의 정보가, 이어지는 개 줄에 두 번째 트리의 정보가 주어진다. 트리는 인접 행렬로 주어진다. 각 줄은 길이가 인 문자열이고, 번째 줄의 번째 문자가 'X'이면 번 정점과 번 정점을 잇는 간선이 있다는 뜻이고, '-'이면 없다는 뜻이다.
출력
첫째 줄에 주어진 두 트리를 이어 붙여 만들 수 있는 그래프에서 길이가 인 단순 사이클 개수의 최댓값을 출력한다.