#abc021c. [abc021_c]正直者の高橋くん

[abc021_c]正直者の高橋くん

问题描述

你和高桥君住在AtCoder王国。AtCoder王国有N个城镇和M条道路,它们可以双向移动。 N个城镇分别称为城镇1、城镇2、...、城镇N。另外,M条道路分别称为道路1、道路2、...、道路M。

高桥君决定去你家玩。高桥君从城镇a出发,经过AtCoder王国的一些城镇(可以是0个),最后到达城镇b,即你的家。

高桥君声称自己走了最短路径。高桥君很诚实,所以绝对不会撒谎。

因此,你决定计算从城镇a到城镇b的最短路径有多少种。由于答案可能非常大,所以请输出实际答案除以1,000,000,007(=109+7)1,000,000,007(=10^9+7)的余数。

从城镇a到城镇b的最短路径指的是在城镇a到城镇b的移动路径中,经过最少道路次数的路径。


输入

输入从标准输入给出,具体格式如下:

NN aa bb MM x1x_1 y1y_1 x2x_2 y2y_2 : xMx_M yMy_M

  • 第1行是一个整数N(2≦N≦100),表示AtCoder王国中存在的城镇数量。
  • 第2行是两个整数a和b(1≦a,b≦N,a≠b),用空格分隔,表示高桥君出发的城镇和你的家所在的城镇的编号。
  • 第3行是一个整数M(1≦M≦200),表示AtCoder王国中存在的道路数量。
  • 第4行到第M行,每行给出一条道路的信息。对于第i(1≦i≦M)行,用空格分隔,给出道路i连接的两个城镇的编号xix_iyiy_i(1≦xi,yix_i,y_i≦N,xiyix_i≠y_i)。
  • 任意两个城镇之间可以通过若干条道路到达。

输出

输出到标准输出,以1,000,000,0071,000,000,007除以的余数形式表示从城镇a到城镇b的最短路径数量。

请注意输出结尾的换行符。


输入示例1


7
1 7
8
1 2
1 3
4 2
4 3
4 5
4 6
7 5
7 6

输出示例1


4

对于这个输入示例,以下是对应的图形,可以考虑以下4种最短路径:

  • 124571→2→4→5→7
  • 134571→3→4→5→7
  • 124671→2→4→6→7
  • 134671→3→4→6→7


输入示例2


7
1 7
9
1 2
1 3
4 2
4 3
4 5
4 6
7 5
7 6
4 7

输出示例2


2

对于这个输入示例,以下是对应的图形: