#include <bits/stdc++.h> // NeOWami
using namespace std;
#define ft first
#define sc second
using pii = pair<int, int>;
const int N = 3e5 + 5;
const int LG = 19;
int n, m, q;
vector<int> G[N];
namespace BridgeType{
vector<int> g[N], stk;
int color[N], low[N], num[N], stt = 0, scc = 0;
int h[N], up[N][LG];
void dfs(int u, int pre) {
num[u] = low[u] = ++stt;
stk.push_back(u);
for (int v: G[u]) {
if (v == pre) {
pre = 0;
continue;
}
if (!num[v]) {
dfs(v, u);
low[u] = min(low[u], low[v]);
if (low[v] > num[u]) {
int i;
++scc;
do {
i = stk.back(); stk.pop_back();
color[i] = scc;
} while(i != v);
}
}
else low[u] = min(low[u], num[v]);
}
}
void buildGraph() {
for (int u = 1; u <= n; u++) {
for (int v: G[u]) if (color[u] != color[v]) {
g[color[u]].push_back(color[v]);
}
}
}
void dfsLca(int u) {
for (int v: g[u]) if (v != up[u][0]) {
h[v] = h[u] + 1;
up[v][0] = u;
for (int lg = 1; lg < LG; lg++) up[v][lg] = up[up[v][lg - 1]][lg - 1];
dfsLca(v);
}
}
int lca(int u, int v) {
if (h[u] != h[v]) {
if (h[u] < h[v]) swap(u, v);
int k = h[u] - h[v];
for (int lg = 0; (1 << lg) <= k; lg++) {
if (k >> lg & 1) u = up[u][lg];
}
}
if (u == v) return u;
for (int lg = __lg(h[u]); lg >= 0; lg--) {
if (up[u][lg] != up[v][lg]) {
u = up[u][lg];
v = up[v][lg];
}
}
return up[u][0];
}
int getPath(int u, int v) {
int p = lca(u, v);
return h[u] + h[v] - 2 * h[p];
}
int query(int a, int b) {
return getPath(color[a], color[b]);
}
void init() {
for (int u = 1; u <= n; u++) {
if (!num[u]) {
dfs(u, -1);
int i;
++scc;
do {
i = stk.back(); stk.pop_back();
color[i] = scc;
} while(i != u);
}
}
buildGraph();
for (int lg = 0; lg < LG; lg++) up[1][lg] = 1;
dfsLca(1);
}
};
namespace APType{
vector<int> g[N], stk;
vector<int> Group[N];
int color[N], low[N], num[N], stt = 0, scc = 0;
int AP[N];
int sz = 0;
int h[N], up[N][LG];
int on[N], val[N];
void dfs(int u, int pre) {
num[u] = low[u] = ++stt;
stk.push_back(u);
for (int v: G[u]) {
if (v == pre) continue;
if (!num[v]) {
dfs(v, u);
low[u] = min(low[u], low[v]);
if (low[v] >= num[u]) {
if (num[u] > 1 || num[v] > 2) AP[u] = 1;
++scc;
Group[scc].push_back(u);
int t;
do {
t = stk.back(); stk.pop_back();
Group[scc].push_back(t);
} while(t != v);
}
}
else low[u] = min(low[u], num[v]);
}
}
void buildTree() {
for (int u = 1; u <= n; u++) {
if (AP[u]) color[u] = ++sz;
}
for (int id = 1; id <= scc; id++) { // Worst case scc eqqual n + m, so Color[N + M];
int U = ++sz;
for (int u: Group[id]) {
if (!AP[u]) color[u] = U;
else {
g[U].push_back(color[u]);
g[color[u]].push_back(U);
}
}
}
}
void dfsLca(int u) {
val[u] += on[u];
for (int v: g[u]) if (v != up[u][0]) {
h[v] = h[u] + 1;
up[v][0] = u;
for (int lg = 1; lg < LG; lg++) up[v][lg] = up[up[v][lg - 1]][lg - 1];
val[v] = val[u];
dfsLca(v);
}
}
int lca(int u, int v) {
if (h[u] != h[v]) {
if (h[u] < h[v]) swap(u, v);
int k = h[u] - h[v];
for (int lg = 0; (1 << lg) <= k; lg++) {
if (k >> lg & 1) u = up[u][lg];
}
}
if (u == v) return u;
for (int lg = __lg(h[u]); lg >= 0; lg--) {
if (up[u][lg] != up[v][lg]) {
u = up[u][lg];
v = up[v][lg];
}
}
return up[u][0];
}
int getPath(int u, int v) {
int p = lca(u, v);
return val[u] + val[v] - 2 * val[p] + on[p];
}
int query(int a, int b) {
return getPath(color[a], color[b]) + !AP[a] + !AP[b];
}
void init() {
for (int u = 1; u <= n; u++) {
if (!num[u]) dfs(u, -1);
}
buildTree();
for (int i = 1; i <= n; i++) if (AP[i]) on[color[i]] = 1;
for (int i = 1; i <= sz; i++) if (!up[i][0]) {
for (int lg = 0; lg < LG; lg++) up[i][lg] = i;
dfsLca(i);
}
}
};
signed main() {
cin.tie(NULL)->sync_with_stdio(false);
if(ifstream("CNET.inp")) {
freopen("CNET.inp", "r", stdin);
freopen("CNET.out", "w", stdout);
}
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
BridgeType::init();
APType::init();
cin >> q;
while(q--) {
int a, b; cin >> a >> b;
cout << APType::query(a, b) << " " << BridgeType::query(a, b) << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IC8vIE5lT1dhbWkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKdXNpbmcgcGlpID0gcGFpcjxpbnQsIGludD47CmNvbnN0IGludCBOID0gM2U1ICsgNTsKY29uc3QgaW50IExHID0gMTk7CmludCBuLCBtLCBxOwp2ZWN0b3I8aW50PiBHW05dOwoKbmFtZXNwYWNlIEJyaWRnZVR5cGV7CnZlY3RvcjxpbnQ+IGdbTl0sIHN0azsKaW50IGNvbG9yW05dLCBsb3dbTl0sIG51bVtOXSwgc3R0ID0gMCwgc2NjID0gMDsKCmludCBoW05dLCB1cFtOXVtMR107CnZvaWQgZGZzKGludCB1LCBpbnQgcHJlKSB7CiAgICBudW1bdV0gPSBsb3dbdV0gPSArK3N0dDsKICAgIHN0ay5wdXNoX2JhY2sodSk7CiAgICBmb3IgKGludCB2OiBHW3VdKSB7CiAgICAgICAgaWYgKHYgPT0gcHJlKSB7CiAgICAgICAgICAgIHByZSA9IDA7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIW51bVt2XSkgewogICAgICAgICAgICBkZnModiwgdSk7CiAgICAgICAgICAgIGxvd1t1XSA9IG1pbihsb3dbdV0sIGxvd1t2XSk7CiAgICAgICAgICAgIGlmIChsb3dbdl0gPiBudW1bdV0pIHsKICAgICAgICAgICAgICAgIGludCBpOwogICAgICAgICAgICAgICAgKytzY2M7CiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgaSA9IHN0ay5iYWNrKCk7IHN0ay5wb3BfYmFjaygpOwogICAgICAgICAgICAgICAgICAgIGNvbG9yW2ldID0gc2NjOwogICAgICAgICAgICAgICAgfSB3aGlsZShpICE9IHYpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgbG93W3VdID0gbWluKGxvd1t1XSwgbnVtW3ZdKTsKICAgIH0KfQoKdm9pZCBidWlsZEdyYXBoKCkgewogICAgZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSB7CiAgICAgICAgZm9yIChpbnQgdjogR1t1XSkgaWYgKGNvbG9yW3VdICE9IGNvbG9yW3ZdKSB7CiAgICAgICAgICAgIGdbY29sb3JbdV1dLnB1c2hfYmFjayhjb2xvclt2XSk7CiAgICAgICAgfQogICAgfQp9CnZvaWQgZGZzTGNhKGludCB1KSB7CiAgICBmb3IgKGludCB2OiBnW3VdKSBpZiAodiAhPSB1cFt1XVswXSkgewogICAgICAgIGhbdl0gPSBoW3VdICsgMTsKICAgICAgICB1cFt2XVswXSA9IHU7CiAgICAgICAgZm9yIChpbnQgbGcgPSAxOyBsZyA8IExHOyBsZysrKSB1cFt2XVtsZ10gPSB1cFt1cFt2XVtsZyAtIDFdXVtsZyAtIDFdOwogICAgICAgIGRmc0xjYSh2KTsKICAgIH0KfQppbnQgbGNhKGludCB1LCBpbnQgdikgewogICAgaWYgKGhbdV0gIT0gaFt2XSkgewogICAgICAgIGlmIChoW3VdIDwgaFt2XSkgc3dhcCh1LCB2KTsKICAgICAgICBpbnQgayA9IGhbdV0gLSBoW3ZdOyAKICAgICAgICBmb3IgKGludCBsZyA9IDA7ICgxIDw8IGxnKSA8PSBrOyBsZysrKSB7CiAgICAgICAgICAgIGlmIChrID4+IGxnICYgMSkgdSA9IHVwW3VdW2xnXTsKICAgICAgICB9CiAgICB9CiAgICBpZiAodSA9PSB2KSByZXR1cm4gdTsKICAgIGZvciAoaW50IGxnID0gX19sZyhoW3VdKTsgbGcgPj0gMDsgbGctLSkgewogICAgICAgIGlmICh1cFt1XVtsZ10gIT0gdXBbdl1bbGddKSB7CiAgICAgICAgICAgIHUgPSB1cFt1XVtsZ107CiAgICAgICAgICAgIHYgPSB1cFt2XVtsZ107CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHVwW3VdWzBdOwp9CmludCBnZXRQYXRoKGludCB1LCBpbnQgdikgewogICAgaW50IHAgPSBsY2EodSwgdik7CiAgICByZXR1cm4gaFt1XSArIGhbdl0gLSAyICogaFtwXTsKfQppbnQgcXVlcnkoaW50IGEsIGludCBiKSB7CiAgICByZXR1cm4gZ2V0UGF0aChjb2xvclthXSwgY29sb3JbYl0pOwp9CnZvaWQgaW5pdCgpIHsKICAgIGZvciAoaW50IHUgPSAxOyB1IDw9IG47IHUrKykgewogICAgICAgIGlmICghbnVtW3VdKSB7CiAgICAgICAgICAgIGRmcyh1LCAtMSk7CiAgICAgICAgICAgIGludCBpOwogICAgICAgICAgICArK3NjYzsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaSA9IHN0ay5iYWNrKCk7IHN0ay5wb3BfYmFjaygpOwogICAgICAgICAgICAgICAgY29sb3JbaV0gPSBzY2M7CiAgICAgICAgICAgIH0gd2hpbGUoaSAhPSB1KTsKICAgICAgICAKICAgICAgICB9CiAgICB9CiAgICBidWlsZEdyYXBoKCk7CiAgICBmb3IgKGludCBsZyA9IDA7IGxnIDwgTEc7IGxnKyspIHVwWzFdW2xnXSA9IDE7CiAgICBkZnNMY2EoMSk7Cn0KfTsKCm5hbWVzcGFjZSBBUFR5cGV7CnZlY3RvcjxpbnQ+IGdbTl0sIHN0azsKdmVjdG9yPGludD4gR3JvdXBbTl07CmludCBjb2xvcltOXSwgbG93W05dLCBudW1bTl0sIHN0dCA9IDAsIHNjYyA9IDA7CmludCBBUFtOXTsKaW50IHN6ID0gMDsKCmludCBoW05dLCB1cFtOXVtMR107CmludCBvbltOXSwgdmFsW05dOwp2b2lkIGRmcyhpbnQgdSwgaW50IHByZSkgewogICAgbnVtW3VdID0gbG93W3VdID0gKytzdHQ7CiAgICBzdGsucHVzaF9iYWNrKHUpOwogICAgZm9yIChpbnQgdjogR1t1XSkgewogICAgICAgIGlmICh2ID09IHByZSkgY29udGludWU7CiAgICAgICAgCiAgICAgICAgaWYgKCFudW1bdl0pIHsKICAgICAgICAgICAgZGZzKHYsIHUpOwogICAgICAgICAgICBsb3dbdV0gPSBtaW4obG93W3VdLCBsb3dbdl0pOwogICAgICAgICAgICBpZiAobG93W3ZdID49IG51bVt1XSkgewogICAgICAgICAgICAgICAgaWYgKG51bVt1XSA+IDEgfHwgbnVtW3ZdID4gMikgQVBbdV0gPSAxOwogICAgICAgICAgICAgICAgKytzY2M7CiAgICAgICAgICAgICAgICBHcm91cFtzY2NdLnB1c2hfYmFjayh1KTsKICAgICAgICAgICAgICAgIGludCB0OwogICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgIHQgPSBzdGsuYmFjaygpOyBzdGsucG9wX2JhY2soKTsKICAgICAgICAgICAgICAgICAgICBHcm91cFtzY2NdLnB1c2hfYmFjayh0KTsKICAgICAgICAgICAgICAgIH0gd2hpbGUodCAhPSB2KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGxvd1t1XSA9IG1pbihsb3dbdV0sIG51bVt2XSk7CiAgICB9Cn0Kdm9pZCBidWlsZFRyZWUoKSB7CiAgICBmb3IgKGludCB1ID0gMTsgdSA8PSBuOyB1KyspIHsKICAgICAgICBpZiAoQVBbdV0pIGNvbG9yW3VdID0gKytzejsKICAgIH0KICAgIGZvciAoaW50IGlkID0gMTsgaWQgPD0gc2NjOyBpZCsrKSB7IC8vIFdvcnN0IGNhc2Ugc2NjIGVxcXVhbCBuICsgbSwgc28gQ29sb3JbTiArIE1dOwogICAgICAgIGludCBVID0gKytzejsKICAgICAgICBmb3IgKGludCB1OiBHcm91cFtpZF0pIHsKICAgICAgICAgICAgaWYgKCFBUFt1XSkgY29sb3JbdV0gPSBVOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGdbVV0ucHVzaF9iYWNrKGNvbG9yW3VdKTsKICAgICAgICAgICAgICAgIGdbY29sb3JbdV1dLnB1c2hfYmFjayhVKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQp2b2lkIGRmc0xjYShpbnQgdSkgewogICAgdmFsW3VdICs9IG9uW3VdOwogICAgZm9yIChpbnQgdjogZ1t1XSkgaWYgKHYgIT0gdXBbdV1bMF0pIHsKICAgICAgICBoW3ZdID0gaFt1XSArIDE7CiAgICAgICAgdXBbdl1bMF0gPSB1OwogICAgICAgIGZvciAoaW50IGxnID0gMTsgbGcgPCBMRzsgbGcrKykgdXBbdl1bbGddID0gdXBbdXBbdl1bbGcgLSAxXV1bbGcgLSAxXTsKICAgICAgICB2YWxbdl0gPSB2YWxbdV07CiAgICAgICAgZGZzTGNhKHYpOwogICAgfQp9CmludCBsY2EoaW50IHUsIGludCB2KSB7CiAgICBpZiAoaFt1XSAhPSBoW3ZdKSB7CiAgICAgICAgaWYgKGhbdV0gPCBoW3ZdKSBzd2FwKHUsIHYpOwogICAgICAgIGludCBrID0gaFt1XSAtIGhbdl07IAogICAgICAgIGZvciAoaW50IGxnID0gMDsgKDEgPDwgbGcpIDw9IGs7IGxnKyspIHsKICAgICAgICAgICAgaWYgKGsgPj4gbGcgJiAxKSB1ID0gdXBbdV1bbGddOwogICAgICAgIH0KICAgIH0KICAgIGlmICh1ID09IHYpIHJldHVybiB1OwogICAgZm9yIChpbnQgbGcgPSBfX2xnKGhbdV0pOyBsZyA+PSAwOyBsZy0tKSB7CiAgICAgICAgaWYgKHVwW3VdW2xnXSAhPSB1cFt2XVtsZ10pIHsKICAgICAgICAgICAgdSA9IHVwW3VdW2xnXTsKICAgICAgICAgICAgdiA9IHVwW3ZdW2xnXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdXBbdV1bMF07Cn0KaW50IGdldFBhdGgoaW50IHUsIGludCB2KSB7CiAgICBpbnQgcCA9IGxjYSh1LCB2KTsKICAgIHJldHVybiB2YWxbdV0gKyB2YWxbdl0gLSAyICogdmFsW3BdICsgb25bcF07Cn0KaW50IHF1ZXJ5KGludCBhLCBpbnQgYikgewogICAgcmV0dXJuIGdldFBhdGgoY29sb3JbYV0sIGNvbG9yW2JdKSArICFBUFthXSArICFBUFtiXTsKfQp2b2lkIGluaXQoKSB7CiAgICBmb3IgKGludCB1ID0gMTsgdSA8PSBuOyB1KyspIHsKICAgICAgICBpZiAoIW51bVt1XSkgZGZzKHUsIC0xKTsKICAgIH0KICAgIGJ1aWxkVHJlZSgpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBpZiAoQVBbaV0pIG9uW2NvbG9yW2ldXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBzejsgaSsrKSBpZiAoIXVwW2ldWzBdKSB7CiAgICAgICAgZm9yIChpbnQgbGcgPSAwOyBsZyA8IExHOyBsZysrKSB1cFtpXVtsZ10gPSBpOwogICAgICAgIGRmc0xjYShpKTsKICAgIH0KfQp9OwoKc2lnbmVkIG1haW4oKSB7CiAgICBjaW4udGllKE5VTEwpLT5zeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgaWYoaWZzdHJlYW0oIkNORVQuaW5wIikpIHsKICAgICAgICBmcmVvcGVuKCJDTkVULmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIkNORVQub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgY2luID4+IG4gPj4gbTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgR1t1XS5wdXNoX2JhY2sodik7CiAgICAgICAgR1t2XS5wdXNoX2JhY2sodSk7CiAgICB9CiAgICBCcmlkZ2VUeXBlOjppbml0KCk7CiAgICBBUFR5cGU6OmluaXQoKTsKICAgIGNpbiA+PiBxOwogICAgd2hpbGUocS0tKSB7CiAgICAgICAgaW50IGEsIGI7IGNpbiA+PiBhID4+IGI7CiAgICAgICAgY291dCA8PCBBUFR5cGU6OnF1ZXJ5KGEsIGIpIDw8ICIgIiA8PCBCcmlkZ2VUeXBlOjpxdWVyeShhLCBiKSA8PCAiXG4iOwogICAgfQogICAgcmV0dXJuIDA7Cn0=