Coloring Madness

문제 정보

    • 문제 ID
    • 시간 제한
    • 메모리 제한
    • 제출 횟수
    • 정답 횟수 (비율)
    • 출제자
    • 출처
    • 분류

문제

N개의 정점을 가진 방향성 그래프가 있다. 각 그래프의 정점에 1에서 N까지의 번호가 매겨져 있다.
이 그래프에는 N \times (N-1)개의 간선이 존재하는데, 이는 임의의 서로 다른 두 정점을 연결하는 방향성 간선이 하나씩 있는 것이다. 이 간선을 이용해 x번 정점에서 y번 정점으로 이동하는 데에는 t_{x, y}의 시간이 걸린다. 이 때 t_{x, y} \neq t_{y, x}일 수도 있음에 유의하라.

또한, 각 정점에는 색이 칠해져 있다. 이 색은 모두 구분이 가능하며, N가지의 색이 있다. 색에도 1에서 N까지의 번호를 붙이도록 한다. 초기에 i번 정점에 색칠된 색의 번호를 C_i라고 하자. 경근이는 x번 정점에서 시작하여 그래프 위를 돌아다니며 정점에 칠해진 색을 바꾸려고 하는데, 그 과정은 다음과 같다 :

  1. 모든 정점이 같은 색으로 칠해져 있다면 과정을 종료한다.
  2. 만약 경근이가 현재 i번 정점에 있다면, 다음에 이동할 정점으로 i번 정점과는 다른 j를 각각 \frac{1}{N - 1}의 확률로 선택한다.
  3. i번 정점의 색 C_ip의 확률로 색 C_j로 칠한다.
  4. 경근이가 j번 정점으로 이동한다. 이 때 t_{i, j}의 시간이 걸린다. 그 후, j번 정점의 색 C_jq의 확률로 2번 단계에서의 C_i로 칠한다. 1번 단계로 돌아간다.

경근이가 색칠하는 과정을 끝내기까지 걸리는 시간의 기댓값을 구하여라.

입력

첫 번째 줄에 정점의 개수를 나타내는 정수 N (1 \le N \le 25)이 주어진다.

두 번째 줄에 두 개의 정수 P, Q (1 \le P, Q < 10^6)가 공백으로 구분되어 주어진다. 이는 p = \frac{P}{10^6}, q = \frac{Q}{10^6}임을 나타낸다.

세 번째 줄부터 N 개의 줄에 걸쳐 각 줄에 N개의 정수가 공백으로 구분되어 주어진다. 이 때, i번째 줄의 j번째 정수는 t_{i, j} (0 \le t_{i, j} \le 10^6 이고 t_{i, i}=0)를 나타낸다.

N + 3번쨰 줄에 초기 상태의 개수를 나타내는 정수 Q (1 \le Q \le 100)가 주어진다.

N + 4번째 줄부터 Q개의 줄에 걸쳐 각 줄에 N + 1개의 정수 C_1, C_2, \cdots, C_N, x (1 \le C_i, x \le N)가 공백으로 구분되어 주어진다. 이는 처음 각 정점에 C_1, C_2, \cdots, C_N의 색이 칠해져 있고, x번 정점에서 시작할 때 색칠하는 과정을 끝내기는 데 걸리는 시간의 기댓값을 구해야 한다는 의미이다.

출력

Q개의 줄에 걸쳐, 각 초기 상태에 대한 기댓값을 주어진 순서대로 출력한다. 이 때 기댓값을 기약분수로 나타냈을 때 \frac{a}{b}라고 하면, a = bx \pmod{1\,000\,000\,007}을 만족하는 0이상 1\,000\,000\,006이하의 x를 출력해야 한다. 이러한 x가 존재하는 것이 보장된 입력만 주어지고, x가 유일하다는 것은 증명되어 있다.

예제 입력

Example 1
2
500000 500000
0 3
6 0
2
1 2 1
1 2 2

Example 2
4
1 999999
0 1 2 3
4 0 5 6
7 8 0 9
10 11 12 0
8
1 2 3 4 1
2 2 4 4 2
2 4 2 4 3
1 3 3 3 4
2 1 1 4 1
2 1 3 2 2
1 1 1 1 3
4 3 2 1 4}

Example 3
10
12345 67890
0 1 2 3 4 5 6 7 8 9
2 0 8 6 4 2 4 6 8 2
3 3 0 3 3 3 3 3 3 3
9 9 7 0 5 5 3 3 1 1
4 5 4 5 0 9 9 9 9 9
7 8 7 8 7 0 8 7 8 7
1 2 1 2 1 2 0 2 1 2
8 8 8 6 6 6 6 0 5 5
2 3 4 2 3 4 2 3 0 4
9 8 7 6 5 4 3 2 1 0
10
10 1 2 3 4 5 6 7 8 9 1
2 10 8 6 4 2 4 6 8 2 2
3 3 10 3 3 3 3 3 3 3 3
9 9 7 10 5 5 3 3 1 1 4
4 5 4 5 10 9 9 9 9 9 5
7 8 7 8 7 10 8 7 8 7 6
1 2 1 2 1 2 10 2 1 2 7
8 8 8 6 6 6 6 10 5 5 8
2 3 4 2 3 4 2 3 10 4 9
9 8 7 6 5 4 3 2 1 10 10

예제 출력

Example 1
8
10

Example 2
927109659
403093474
333557301
397999267
133598154
72237072
0
167611085

Example 3
237022287
143958236
496080996
656087792
138754989
710634903
257351692
992622856
107435663
237022287

노트

예제 입출력에서 Example로 시작하는 줄은 실제 입출력에 포함되지 않습니다. 각각을 하나의 입출력 세트로 읽어주세요.

0개의 댓글이 있습니다.