우“영”이와 현“철”이는 영철버거 돈 마리네 세트를 걸고 내기를 한다. 현철이는 <제2회 고려대학교 MatKor Cup: 2023 Winter>의 DAGame에서 다음과 같은 게임을 만들었다.
N개의 노드와 M개의 간선으로 이루어진 DAG(사이클이 없는 방향 그래프)가 있다. K개의 말이 각각 노드 중 하나에 놓여 있다. 모든 노드마다 놓을 수 있는 말의 개수에는 제한이 없으며, 각각의 말은 색깔을 가지고 있다. 또한, 각 색깔은 1 이상 N 이하의 정수로 표현된다. 모든 색깔에 대하여 특정 색깔을 가진 말은 최대 두 개뿐이다. 우영이부터 차례를 번갈아 가며 다음 행동을 취한다.
게임 시작 전부터 말이 업히는 경우가 존재할 수도 있다. 자신의 차례에 더이상 행동을 할 수 없는 사람이 지게 된다.
이 내기가 고려대학교의 명물이 되자, 영철버거를 찾는 손님들이 누가 이길지를 두고 내기를 하기 시작했다. 하지만 언제나 정답을 예측할 수 있으므로 불공평하다는 단점이 있었다.
이를 알게 된 현철은 각 말의 위치를 색깔에 따라 다른 암호를 사용하여 암호화하였으며, 색깔 c에 대응하는 암호는 두 정수 H_0(c),H_1(c)로 표현할 수 있다. H_0(c),H_1(c)은 모두 256 미만의 음이 아닌 정수이며 서로 다른 c에 대하여 같은 값을 가질 수 있다. A는 0 이상 256 미만의 정수로 이루어진 순열이다. 말의 위치가 v, 색깔이 c일 때, 현철은 식 E=A\[v⊕H_0(c)]⊕H_1(c)을 통해 암호문 E를 생성한다. 여기서 ⊕는 비트 단위 XOR 연산자이다.
게임을 생성하는 과정에서 말이 각 칸에 위치할 확률은 동일하며, 말의 위치는 서로 독립적이다.
데이터를 모두 암호화한 현철은 암호문이 어느 정도의 정보를 담고 있는지 궁금해졌다. 암호문이 주어질 때, 우영이가 이길 확률을 계산하여 현철에게 알려주도록 하자. 이때 우영이가 이길 확률이란, 주어진 암호문을 생성하는 암호 H_0, H_1과 말의 위치 v로 가능한 경우의 수를 X, 그중 우영이가 이기는 경우의 수를 Y라고 할 때, XY이다.
첫 번째 줄에 노드의 개수를 나타내는 정수 N(2≤N≤256), 간선의 개수를 나타내는 정수 M(1≤M≤100,000)이 주어진다.
두 번째 줄 부터 M개의 줄에 공백으로 구분된 서로 다른 두 정수 p, q(0≤p, q≤N−1)가 주어지며 이는 p번 노드에서 q번 노드로 가는 간선이 존재한다는 것을 뜻한다. 어떤 p와 q에 대해서 p번 노드와 q번 노드를 잇는 동일한 간선이 여러 개 존재할 수도 있다.
다음 줄에는 256개의 정수 A\[i](0≤A\[i]≤255)가 순서대로 주어진다.
다음 줄에는 말의 개수를 나타내는 정수 K(1≤K≤2N)가 주어진다.
다음 줄부터 K개의 줄에 두 정수 c_i(0≤c_i≤N−1), E_i(0≤E_i≤255)가 주어지며 i번 말이 색깔이 c_i이고 v_i번 노드에 놓여 있을 때, E_i=A\[v_i⊕H_0(c_i)]⊕H_1(c_i), 0≤v_i≤N−1를 만족한다.
주어지는 그래프는 DAG(Directed acyclic graph, 유향 비순환 그래프)이며, A는 순열이다. 그리고 주어지는 데이터를 생성할 수 있는 게임이 적어도 하나 이상 존재한다.
첫 번째 줄에 암호화된 데이터가 우영이가 이기는 게임이었을 확률을 109+7로 나눈 나머지를 출력하라. 단, 109+7은 소수이다.
기약분수 qp(p≥0,q>0,gcd(p,q)=1)를 M으로 나눈 나머지는 q−1가 q⋅q−1≡1(modM)을 만족하는 정수, 즉 q의 M에 대한 모듈로 곱셈 역원일 때, p⋅q−1(modM)로 정의한다. 만약 정수일 경우 q=q−1=1이므로 p(modM)를 의미한다.
확률을 109+7로 나눈 나머지가 유일하게 결정되는 입력만 주어진다. 즉, 답은 정수이거나 기약분수로 나타냈을 때 분모가 109+7과 서로소인 경우만 주어진다.