아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

단순 사이클의 개수

시간 제한2초메모리 제한512 MB

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

어려움10점 중 8점

유형
백트래킹, 그래프, 조합론, 완전 탐색
정답자
아직 제출이 없습니다

문제

그래프 GG에서 길이가 L≥3L \ge 3인 단순 사이클은 정점 순열 (v0,v1,…,vL−1)(v_0, v_1, \dots, v_{L-1})이다. v0,v1,…,vL−1v_0, v_1, \dots, v_{L-1}은 서로 모두 다르고, 모든 0≤i≤L−10 \le i \le L-1에 대해 viv_i와 v(i+1) mod Lv_{(i+1) \bmod L}을 잇는 간선이 GG에 있다.

두 단순 사이클 XX와 YY는, 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번부터 N−1N-1번까지 번호가 매겨져 있다. 먼저 0부터 N−1N-1까지의 수로 이루어진 순열 PP를 하나 만든다. 그 다음 모든 0≤i≤N−10 \le i \le N-1에 대해 첫 번째 트리의 ii번 정점과 두 번째 트리의 P[i]P[i]번 정점을 간선으로 잇는다.

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

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

입력

첫째 줄에 NN과 KK가 주어진다. (1≤N≤91 \le N \le 9, 3≤K≤73 \le K \le 7)

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

출력

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

예제4

  1. 예제 1

    입력
    2 4
    -X
    X-
    -X
    X-
    
    예상 출력
    1
    
  2. 예제 2

    입력
    3 5
    -X-
    X-X
    -X-
    -X-
    X-X
    -X-
    
    예상 출력
    2
    
  3. 예제 3

    입력
    3 3
    -X-
    X-X
    -X-
    -X-
    X-X
    -X-
    
    예상 출력
    0
    
  4. 예제 4

    입력
    5 6
    -X---
    X-XXX
    -X---
    -X---
    -X---
    -X-X-
    X-X-X
    -X---
    X----
    -X---
    
    예상 출력
    5