만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Ryser만큼 빠르게

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

요약
정점이 최대 36개인 그래프에서 서로 정점을 공유하지 않는 간선 집합 S마다 c의 |S|제곱을 구하고, 그 합을 10^9+7로 나눈 나머지를 구합니다.
난이도

어려움10점 중 8점

유형
그래프, 비트 연산, 동적 계획법, 분할 정복
정답자
아직 제출이 없습니다

문제

Counting Perfect Matchings as Fast as Ryser 논문을 읽고 일반 그래프에서 완전 매칭의 개수를 O(2nn2)O(2^n n^2) 시간에 세는 방법을 배웠다. 이 문제는 사람들이 그 논문을 읽고 새로운 기법을 익히도록 하려고 출제했다.

정점이 nn개, 간선이 mm개인 무방향 그래프와 상수 cc가 주어진다. 간선 집합 SS의 가중치를 다음과 같이 정의한다.

  • 집합 SS에 정점을 공유하는 간선 쌍이 있으면 가중치는 0이다.
  • 그렇지 않으면 가중치는 c∣S∣c^{|S|}이다. 공집합의 가중치는 1이다.

간선의 모든 부분집합에 대해 가중치의 합을 구하라. 답이 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 출력한다.

입력

첫째 줄에 정수 nn, mm, cc가 주어진다 (1≤n≤361 \le n \le 36, 0≤m≤n(n−1)/20 \le m \le n(n-1)/2, 1≤c≤109+61 \le c \le 10^9+6). 이어지는 mm개의 줄에는 무방향 간선 (u,v)(u, v)를 나타내는 정수 uu, vv가 한 줄에 하나씩 주어진다 (1≤u,v≤n1 \le u, v \le n, u≠vu \ne v). 모든 간선은 서로 다르다.

출력

답을 나타내는 정수 하나를 출력한다.

예제2

  1. 예제 1

    입력
    6 10 100
    3 6
    1 3
    2 4
    3 4
    4 6
    1 2
    4 5
    2 3
    1 4
    3 5
    
    예상 출력
    2171001
    
  2. 예제 2

    입력
    8 11 818466928
    6 7
    3 6
    6 5
    7 3
    6 2
    8 1
    1 7
    4 3
    5 1
    6 1
    6 4
    
    예상 출력
    425176360