// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n, m, q, h[N], par[N][20], tin[N], tout[N], timer = 0;
vector<int> G[N];
vector<pair<int, int>> adj[N];
stack<int> s;
int num[N], low[N], scc[N], cou = 0, cnt = 0;
void tarjan(int u, int old) {
num[u] = low[u] = ++cou;
s.push(u);
for(auto [v, id] : adj[u]) {
if (old == id) continue;
if (num[v]) low[u] = min(low[u], num[v]);
else {
tarjan(v, id);
low[u] = min(low[u], low[v]);
}
}
if (num[u] == low[u]) {
int v;
cnt++;
do {
v = s.top();
s.pop();
scc[v] = cnt;
} while(v != u);
}
}
void dfs(int u) {
tin[u] = ++timer;
for(int j = 1; j <= 19; j++) par[u][j] = par[par[u][j - 1]][j - 1];
for(int v : G[u]) if (v != par[u][0]) {
par[v][0] = u;
h[v] = h[u] + 1;
dfs(v);
}
tout[u] = timer;
}
int LCA(int u, int v) {
if (h[u] < h[v]) swap(u, v);
int s = h[u] - h[v];
for(int j = 0; j < 20; j++) if ((s >> j) & 1)
u = par[u][j];
if (u == v) return u;
for(int j = 19; j >= 0; j--) if (par[u][j] != par[v][j]) {
u = par[u][j];
v = par[v][j];
}
return par[u][0];
}
int dist(int u, int v) {
return h[u] + h[v] - 2 * h[LCA(u, v)];
}
bool in(int u, int v){
return tin[u] <= tin[v] && tout[v] <= tout[u];
}
int f(int x, int y, int u, int v) {
if (h[x] > h[u]) swap(x, u), swap(y, v);
if (in(x, u) && in(u, y)) return max(0, h[LCA(v, y)] - h[u]);
return 0;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m >> q;
for(int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].emplace_back(v, i);
adj[v].emplace_back(u, i);
}
for(int i = 1; i <= n; i++) if (!num[i]) tarjan(i, -1);
for(int i = 1; i <= n; i++) {
for(auto [v,id] : adj[i]) if (scc[i] != scc[v])
G[scc[i]].push_back(scc[v]);
}
dfs(1);
while(q--) {
int a, b, c, d;
cin >> a >> b >> c >> d;
a = scc[a]; b = scc[b]; c = scc[c]; d = scc[d];
int u = LCA(a, b);
int v = LCA(c, d);
cout << dist(c, d) - (f(u, a, v, c) + f(u, b, v, c) + f(u, a, v, d) + f(u, b, v, d)) << '\n';
}
return 0;
}
Ly8gfn4gaWNlYmVhciB+fgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE4gPSAyZTUgKyA1OwppbnQgbiwgbSwgcSwgaFtOXSwgcGFyW05dWzIwXSwgdGluW05dLCB0b3V0W05dLCB0aW1lciA9IDA7CnZlY3RvcjxpbnQ+IEdbTl07CnZlY3RvcjxwYWlyPGludCwgaW50Pj4gYWRqW05dOwpzdGFjazxpbnQ+IHM7CmludCBudW1bTl0sIGxvd1tOXSwgc2NjW05dLCBjb3UgPSAwLCBjbnQgPSAwOwoKdm9pZCB0YXJqYW4oaW50IHUsIGludCBvbGQpIHsKICAgIG51bVt1XSA9IGxvd1t1XSA9ICsrY291OwogICAgcy5wdXNoKHUpOwogICAgZm9yKGF1dG8gW3YsIGlkXSA6IGFkalt1XSkgewogICAgICAgIGlmIChvbGQgPT0gaWQpIGNvbnRpbnVlOwogICAgICAgIGlmIChudW1bdl0pIGxvd1t1XSA9IG1pbihsb3dbdV0sIG51bVt2XSk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRhcmphbih2LCBpZCk7CiAgICAgICAgICAgIGxvd1t1XSA9IG1pbihsb3dbdV0sIGxvd1t2XSk7CiAgICAgICAgfQogICAgfQogICAgaWYgKG51bVt1XSA9PSBsb3dbdV0pIHsKICAgICAgICBpbnQgdjsKICAgICAgICBjbnQrKzsKICAgICAgICBkbyB7CiAgICAgICAgICAgIHYgPSBzLnRvcCgpOwogICAgICAgICAgICBzLnBvcCgpOwogICAgICAgICAgICBzY2Nbdl0gPSBjbnQ7CiAgICAgICAgfSB3aGlsZSh2ICE9IHUpOwogICAgfQp9Cgp2b2lkIGRmcyhpbnQgdSkgewogICAgdGluW3VdID0gKyt0aW1lcjsKICAgIGZvcihpbnQgaiA9IDE7IGogPD0gMTk7IGorKykgcGFyW3VdW2pdID0gcGFyW3Bhclt1XVtqIC0gMV1dW2ogLSAxXTsKICAgIGZvcihpbnQgdiA6IEdbdV0pIGlmICh2ICE9IHBhclt1XVswXSkgewogICAgICAgIHBhclt2XVswXSA9IHU7CiAgICAgICAgaFt2XSA9IGhbdV0gKyAxOwogICAgICAgIGRmcyh2KTsKICAgIH0KICAgIHRvdXRbdV0gPSB0aW1lcjsKfQoKaW50IExDQShpbnQgdSwgaW50IHYpIHsKICAgIGlmIChoW3VdIDwgaFt2XSkgc3dhcCh1LCB2KTsKICAgIGludCBzID0gaFt1XSAtIGhbdl07CiAgICBmb3IoaW50IGogPSAwOyBqIDwgMjA7IGorKykgaWYgKChzID4+IGopICYgMSkKICAgICAgICB1ID0gcGFyW3VdW2pdOwogICAgaWYgKHUgPT0gdikgcmV0dXJuIHU7CiAgICBmb3IoaW50IGogPSAxOTsgaiA+PSAwOyBqLS0pIGlmIChwYXJbdV1bal0gIT0gcGFyW3ZdW2pdKSB7CiAgICAgICAgdSA9IHBhclt1XVtqXTsKICAgICAgICB2ID0gcGFyW3ZdW2pdOwogICAgfQogICAgcmV0dXJuIHBhclt1XVswXTsKfQoKaW50IGRpc3QoaW50IHUsIGludCB2KSB7CiAgICByZXR1cm4gaFt1XSArIGhbdl0gLSAyICogaFtMQ0EodSwgdildOwp9Cgpib29sIGluKGludCB1LCBpbnQgdil7CiAgICByZXR1cm4gdGluW3VdIDw9IHRpblt2XSAmJiB0b3V0W3ZdIDw9IHRvdXRbdV07Cn0KCmludCBmKGludCB4LCBpbnQgeSwgaW50IHUsIGludCB2KSB7CiAgICBpZiAoaFt4XSA+IGhbdV0pIHN3YXAoeCwgdSksIHN3YXAoeSwgdik7CiAgICBpZiAoaW4oeCwgdSkgJiYgaW4odSwgeSkpIHJldHVybiBtYXgoMCwgaFtMQ0EodiwgeSldIC0gaFt1XSk7CiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4oKSB7CgogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgY2luID4+IG4gPj4gbSA+PiBxOwogICAgZm9yKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqW3VdLmVtcGxhY2VfYmFjayh2LCBpKTsKICAgICAgICBhZGpbdl0uZW1wbGFjZV9iYWNrKHUsIGkpOwogICAgfQogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGlmICghbnVtW2ldKSB0YXJqYW4oaSwgLTEpOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBmb3IoYXV0byBbdixpZF0gOiBhZGpbaV0pIGlmIChzY2NbaV0gIT0gc2NjW3ZdKQogICAgICAgICAgICBHW3NjY1tpXV0ucHVzaF9iYWNrKHNjY1t2XSk7CiAgICB9CgogICAgZGZzKDEpOwogICAgd2hpbGUocS0tKSB7CiAgICAgICAgaW50IGEsIGIsIGMsIGQ7CiAgICAgICAgY2luID4+IGEgPj4gYiA+PiBjID4+IGQ7CiAgICAgICAgYSA9IHNjY1thXTsgYiA9IHNjY1tiXTsgYyA9IHNjY1tjXTsgZCA9IHNjY1tkXTsKICAgICAgICBpbnQgdSA9IExDQShhLCBiKTsKICAgICAgICBpbnQgdiA9IExDQShjLCBkKTsKICAgICAgICBjb3V0IDw8IGRpc3QoYywgZCkgLSAoZih1LCBhLCB2LCBjKSArIGYodSwgYiwgdiwgYykgKyBmKHUsIGEsIHYsIGQpICsgZih1LCBiLCB2LCBkKSkgPDwgJ1xuJzsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==