AT_abc021_c [ABC021C] 正直者の高橋くん

题目描述

你和高桥君住在 AtCoder 王国。AtCoder 王国有 $N$ 个城镇,以及 $M$ 条连接城镇之间的道路,这些道路都是双向通行的。$N$ 个城镇分别被称为城镇 $1$、城镇 $2$、……、城镇 $N$。$M$ 条道路分别被称为道路 $1$、道路 $2$、……、道路 $M$。 高桥君决定去你家玩。他从城镇 $a$ 出发,经过 AtCoder 王国中的若干个城镇(可以是 $0$ 个),最终到达你家所在的城镇 $b$。 高桥君声称他走的是最短路径。高桥君很诚实,绝不会说谎。 于是,你决定统计一下从城镇 $a$ 到城镇 $b$ 的最短路径有多少条。由于答案可能非常大,请输出答案对 $1,000,000,007(=10^9+7)$ 取模后的结果。 从城镇 $a$ 到城镇 $b$ 的最短路径,指的是在所有从 $a$ 到 $b$ 的路径中,经过道路的次数最少的那种路径。

输入格式

输入将以下述格式从标准输入给出。 > $N$ $a$ $b$ $M$ $x_1$ $y_1$ $x_2$ $y_2$ : $x_M$ $y_M$ - 第 $1$ 行给出 AtCoder 王国中城镇的个数 $N$,满足 $2 \leq N \leq 100$。 - 第 $2$ 行给出高桥君出发的城镇和你家所在的城镇编号 $a, b$,满足 $1 \leq a, b \leq N$,$a \neq b$,以空格分隔。 - 第 $3$ 行给出 AtCoder 王国中道路的个数 $M$,满足 $1 \leq M \leq 200$。 - 接下来的 $M$ 行,每行给出一条道路连接的两个城镇的编号 $x_i, y_i$,满足 $1 \leq x_i, y_i \leq N$,$x_i \neq y_i$,以空格分隔。 - 任意两个城镇之间都可以通过若干条道路互相到达。

输出格式

输出一行,从城镇 $a$ 到城镇 $b$ 的最短路径的条数,对 $1,000,000,007$ 取模后的结果。 请不要忘记输出末尾的换行符。

说明/提示

### 样例解释 1 对于这个输入样例,图如下所示,存在如下 $4$ 条最短路径: - $1 \to 2 \to 4 \to 5 \to 7$ - $1 \to 3 \to 4 \to 5 \to 7$ - $1 \to 2 \to 4 \to 6 \to 7$ - $1 \to 3 \to 4 \to 6 \to 7$ ![](http://abc021.contest.atcoder.jp/img/abc/021/enJQfEfKt-baQEUDjCrVFLSw/C_sample1.png) ### 样例解释 2 对于这个输入样例,图如下所示。 ![](http://abc021.contest.atcoder.jp/img/abc/021/enJQfEfKt-baQEUDjCrVFLSw/C_sample2.png) 由 ChatGPT 4.1 翻译