다리 보수 공사

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

요약
다리들은 (1,1)에서 (N,N)으로 가는 단조 격자 경로를 이루며, 두 다리가 마을을 공유하지 않도록 최대 개수의 다리를 고르고 그러한 최대 집합의 수를 1e9+7로 나눈 나머지로 구한다.
난이도

어려움10점 중 9점

유형
조합론, 동적 계획법, 수학, 누적 합
정답자
아직 제출이 없습니다

문제

KOI 도시는 도시를 동서로 가로지르는 큰 강을 중심으로 형성되어 있다. 강의 북쪽과 남쪽에는 각각 NN개의 마을이 위치해 있다. 북쪽의 마을들은 하류에서부터 순서대로 A_1,A_2,…,A_NA\_1, A\_2, \ldots, A\_N 과 같이 식별되며, 남쪽의 마을들은 하류에서부터 순서대로 B_1,B_2,…,B_NB\_1, B\_2, \ldots, B\_N 과 같이 식별된다. 고로, KOI 도시에는 총 2N2N개의 마을이 존재한다.

KOI 도시의 사람들은 원래 뗏목을 타고 다니며 교류하였으나, 근대화가 진행되면서 강을 가로지르는 다리를 건설하게 되었다. KOI 도시는 하류에서부터 발전하였기 때문에, 맨 처음 건설된 다리는 마을 A_1A\_1 과 마을 B_1B\_1을 이었다. KOI 도시의 사람들은 이렇게 건설된 첫 다리를 00번 다리 라고 부른다. 이후, KOI 도시는 추가적으로 11번 다리, 22번 다리, …\ldots, 2N−22N-2번 다리를 순서대로 건설하여, 총 2N−12N-1개의 다리를 건설하였다.

00번 다리를 지은 이후, 모든 다리는 직전에 지은 다리와 인접한 위치에 건설되었다. 구체적으로, 모든 0≤i≤2N−30 \leq i \leq 2N-3 에 대해서, 만약 ii번 다리가 A_xA\_x 마을과 B_yB\_y 마을을 잇는다면, i+1i + 1번 다리는 A_xA\_x 마을과 B_y+1B\_{y + 1} 마을을 잇거나, A_x+1A\_{x + 1} 마을과 B_yB\_y 마을을 잇는다. 두 경우 중 어떤 것이 결정되었는지는 길이 2N−22N-2의 문자열 SS에 기록되어 있다. 만약 S\[i]=S\[i] = 'A' 일 경우 i+1i+1번 다리는 A_xA\_x 마을과 B_y+1B\_{y+1} 마을을 이으며, S\[i]=S\[i] = 'B' 일 경우 i+1i+1번 다리는 A_x+1A\_{x + 1} 마을과 B_yB\_y 마을을 잇는다. SS 에는 정확히 N−1N-1개의 'A'와 N−1N-1개의 'B' 가 등장한다. 이에 따라 다음과 같은 사실이 성립함을 증명할 수 있다:

  • 존재하지 않는 마을을 잇는 다리는 등장하지 않는다.
  • 임의의 서로 다른 두 마을을 다리만을 통해서 항상 오갈 수 있다.
  • 2N−22N-2번 다리는 A_NA\_N 마을과 B_NB\_N 마을을 잇는다.

KOI 도시는 다리들을 보수하는 공사를 진행하려고 한다. 보수 공사는 2N−12N - 1개 다리 중 몇 개의 다리를 선택해서 진행한다. 공사는 소음을 유발하기 때문에, 어떠한 마을에 대해 이 마을을 잇는 22개 이상의 다리가 동시에 공사의 대상이 되는 일은 피하려고 한다. KOI 도시는, 이 조건을 만족하면서 최대한 많은 다리에 공사를 진행하려고 한다. 또한, 향후 예상하지 못한 문제가 생길 수 있으니, 조건을 만족하면서 최대한 많은 다리에 공사를 진행할 수 있는 경우의 수를 109+710^9 + 7로 나눈 나머지를 계산하고자 한다. 두 공사가 다르다는 것은, 공사의 대상이 되는 다리의 집합이 다르다는 것으로 정의한다.

당신은 KOI 도시를 도와 이 두 값을 모두 계산하여야 한다. 하지만, 다리의 최대 개수만을 계산하였을 때도 부분 점수를 얻을 수 있다.

제한

  • 1≤T≤101 \le T \le 10
  • 2≤N≤2212 \le N \le 2^{21}
  • SS 에는 정확히 N−1N-1개의 'A'와 N−1N-1개의 'B' 가 등장한다.

예제

이 문제는 공개된 예제가 없습니다.