#H1023. 毕业旅行

毕业旅行

题目描述

终于,小明毕业了,他规划进行一次毕业旅行。经过长时间的筛选,小明最终定下来 nn 个城市作为旅行的目的地,并将这些城市人为编号为 1,2,,n1,2,\dots,n。这些城市由 mm 条双向道路连接而成。

小明非常喜欢其中编号为 1,2,,k1,2,\dots,k 的那些城市,在他的旅行中,必须经过 [1,k][1,k]kk 个城市至少一次。当 kk00 时,表示小明不是必须要经过规定的城市。

现在小明会进行为期 dd 天的旅行,每一天小明都可以前往一个城市。小明的起点可以是 1n1\sim n 中任意一个城市,终点也可以是 1n1\sim n 中的任意一个城市,他每天都可以从一个城市走到另一个有道路直接相连的城市。我们可以将小明的旅行表示成一个长度为 dd 的数列,其中数列的第 ii 项为小明第 ii 天所在的城市(第 11 项作为起点城市)。

  • 注意:小明不能连续两天呆在一个城市,即每一天小明必须前往一个有边相连的其他城市。
  • 例如,假设一定要去到 1,21,2 这两个城市,旅行 33 天,那么旅行数列 {1,2,1}\{1,2,1\} 是一种合法的方案, 而 {1,2,2}\{1,2,2\} 是不合法的,这种方案中小明第 22 天到第 33 天都在城市 22

现在小明想知道有多少种不同的旅行方案,即可以表示成多少个长度为 dd 的不同数列,只要有某一天所在的城市不同,就认为这两种方案不同。

小明又将这个问题交给了精通编程的你,现在想知道方案数模 109+910^9+9 的答案。

输入格式

第一行四个非负整数 n,m,k,dn,m,k,d,含义如题面所述。

接下来有 mm 行,每行两个数 u,vu,v,表示 uuvv 之间有一条双向道路相连。

输出格式

输出一行一个整数,表示方案数模 109+910^9+9 后的值。

输入输出样例 #1

输入 #1

4 4 2 3
1 2
2 3
3 1
2 4

输出 #1

10

说明/提示

【样例解释】

小明必须要去城市 1,21,2 至少一次,进行 33 天的旅行。通过枚举,可以发现满足要求的不同的旅行序列有:$\{1,2,1\},\{1,2,3\},\{1,2,4\},\{1,3,2\},\{2,1,2\},\{2,1,3\},\{2,3,1\},\{3,1,2\},\{3,2,1\},\{4,2,1\}$,共 1010 种不同的方式。

【数据范围】

对于所有数据,不保证图全连通,但保证没有重边和自环。

其中所有数据都满足 $1\le n \le 20, 1 \le m \le \min(150,n*(n-1)/2),0 \le k \le \min(n,7),1\le d \le 10^9$,具体分布如下表所示。

测试点 nn\le mm\le kk\le dd\le
11 55 55 11 33
22 1010
33 2020 100100 00 10910^9
454\sim 5 1010 3030 55 100100
6106\sim 10 2020 150150 77 10910^9