func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> e[200100], g[200100];   int n, m, q;   int low[200100], dfn[200100], sta[200100], idx, top;   bool in[200100];   void tarjan(int u, int pre) {     low[u] = dfn[u] = ++idx;     sta[top++] = u;     in[u] = true;     for (auto v : g[u]) {       if (v == pre) continue;       if (!dfn[v]) {         tarjan(v, u);         if (low[u] > low[v]) low[u] = low[v];         if (low[v] >= dfn[u]) {           ++m;           e[u].push_back(m);           e[m].push_back(u);           int vn;           do {             vn = sta[--top];             e[vn].push_back(m);             e[m].push_back(vn);             in[vn] = 0;           } while (vn != v);         }       } else if (in[v] && low[u] > dfn[v])         low[u] = dfn[v];     }   }   int fa[200100][20], dep[200100], dis[200100];   void dfs(int u, int pre) {     fa[u][0] = pre;     for (int i = 1; i < 20; ++i) fa[u][i] = fa[fa[u][i - 1]][i - 1];     dep[u] = dep[pre] + 1;     dis[u] = dis[pre] + (u <= n);     for (auto v : e[u])       if (v != pre) dfs(v, u);   }   int LCA(int u, int v) {     if (dep[u] > dep[v]) swap(u, v);     int hu = dep[u], hv = dep[v];     int tu = u, tv = v;     for (int det = hv - hu, i = 0; det; det >>= 1, i++)       if (det & 1) tv = fa[tv][i];     if (tu == tv) return tu;     for (int i = 19; i >= 0; --i) {       if (fa[tu][i] == fa[tv][i]) continue;       tu = fa[tu][i];       tv = fa[tv][i];     }     return fa[tu][0];   }   int main() {     scanf( %d%d%d , &n, &m, &q);     while (m--) {       int u, v;       scanf( %d%d , &u, &v);       g[u].push_back(v);       g[v].push_back(u);     }     m = n;     tarjan(1, -1);     dfs(1, 1);     while (q--) {       int u, v;       scanf( %d%d , &u, &v);       int lca = LCA(u, v);       int ans = dis[u] + dis[v] - 2 * dis[lca] - (lca > n);       printf( %d n , ans);     }     return 0;   }   