깊이 우선 탐색
시간 제한6초메모리 제한1024 MB
트리 T에 추가 간선 m개 중 일부를 더했을 때, T가 특별한 정점 중 하나에서 시작한 DFS 트리가 되는 부분집합의 수를 셉니다.
문제
깊이 우선 탐색은 널리 쓰이는 탐색 알고리즘이다. 이 알고리즘으로 자기 루프와 중복 간선이 없는 무방향 연결 그래프 와 시작점 에서 트리 를 얻을 수 있다.
알고리즘은 다음과 같이 동작한다.
- 스택 를 비우고, 로 둔다. 즉 의 간선 집합은 처음에 비어 있다.
- 시작점 를 에 넣는다.
- 스택의 맨 위 정점 를 확인하고, 를 방문함으로 표시한다.
- 와 인접하면서 아직 방문하지 않은 정점 가 있으면, 그중 하나를 임의로 골라 를 의 간선 집합에 추가한다. 그다음 를 에 넣고 3번 단계로 돌아간다. 그런 정점이 없으면 를 스택에서 뺀다.
가 연결 그래프이면 이 알고리즘은 의 신장 트리 를 하나 얻는다. 다만 4번 단계에서 어느 정점을 고르느냐, 즉 탐색 순서에 따라 얻는 트리는 하나로 정해지지 않는다. 알고리즘이 얻는 트리가 정확히 가 되도록 하는 탐색 순서가 존재하면, 를 시작점 에 대한 -DFS 트리라고 부른다.
개의 정점에 부터 까지 번호가 붙은 트리 와 추가 간선 개가 주어진다. 이 개의 간선은 서로 다르고, 양 끝점이 서로 다른 정점이며, 의 개 트리 간선과도 다르다고 보장된다. 이 추가 간선을 비트리 간선이라고 부른다. 개의 정점 중 정확히 개를 특수 정점으로 지정한다.
비트리 간선의 부분집합을 고르는 방법의 수를 구한다. 고른 비트리 간선을 의 트리 간선과 합쳐 그래프 를 만들었을 때, 가 -DFS 트리가 되도록 하는 특수 정점 가 존재해야 한다. 비트리 간선을 하나도 고르지 않아도 된다.
답이 매우 클 수 있으므로 로 나눈 나머지를 출력한다.
입력
입력의 첫 줄에 테스트 케이스 번호 가 주어진다. 이면 이 테스트 케이스는 예제 테스트이다.
둘째 줄에 정점 수 , 비트리 간선 수 , 특수 정점 수 가 양의 정수로 주어진다.
이어서 개의 줄에 트리 의 간선 가 한 줄에 하나씩 주어진다. 이 간선들이 트리를 이룬다고 보장된다.
이어서 개의 줄에 비트리 간선 가 한 줄에 하나씩 주어진다. 는 트리 간선과 겹치지 않으며, 중복된 간선도 없다고 보장된다.
마지막 줄에는 특수 정점의 번호 가 주어진다. 이 번호들은 서로 다르다.
출력
답을 한 줄에 출력한다. 답은 로 나눈 나머지이다.
제한
모든 테스트 데이터에 대해 , 이 보장된다.