Maxflow
题号:NC17353
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

    最近新发售了一款游戏《锡拉丘兹:成为农王》。它并没有什么难度,是一个步行模拟类的游戏。该游戏中共有n个地点和m条道路,每条道路均为双向,连接两个不同的地点。每玩一遍游戏,玩家必须从起点x开始,经过若干地点(不可重复),到达终点y(y与x不同)。玩家在玩的过程中,就可以欣赏图中经过的道路上的风景。一般地,玩家无法在一次游戏中看到所有的风景,所以他可能会玩多次。但是玩家缺乏耐心,无论他玩多少次游戏,他都拒绝经过同一条道路两次,以避免看到重复的风景。从不同的方向经过同一条道路也是不被允许的。现在作为游戏的开发商,你想询问这样一个玩家最多可能玩多少次游戏。你会假定若干组不同的起终点x和y。

输入描述:

第一行两个正整数n(1≤n≤100,000)和m(1≤m≤n+100)表示图的点数和边数。
接下来m行每行两个正整数a和b(1≤a,b≤n)表示图中的m条边。保证是连通简单图。
接下来一行一个正整数Q(1≤Q≤100,000)表示询问的组数。
接下来Q行每行两个不同的正整数x和y(1≤x,y≤n)表示一组询问。

输出描述:

对于每组询问输出一行,表示在给定的起终点情况下,玩家最多玩多少次游戏。
示例1

输入

复制
9 10
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 1
1 9
9 5
2
1 5
2 6

输出

复制
3
2