#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;
}
