#include <bits/stdc++.h>
using namespace std;
vector<int> path[600006], road[600006];
int n, m, q, cnt, deep[600006], S[600006], top, dfn[600006], low[600006],
    fa[600006][22], u, v;
void add(int x, int y) {
  road[x].push_back(y);
  road[y].push_back(x);
}
void DFS(int x, int fa) {
  dfn[x] = low[x] = ++cnt;
  S[++top] = x;
  for (int i = 0; i < (int)path[x].size(); i++) {
    int nex = path[x][i];
    if (nex == fa) continue;
    if (dfn[nex])
      low[x] = min(low[x], dfn[nex]);
    else {
      DFS(nex, x);
      if (low[nex] >= dfn[x]) {
        n++;
        add(n, x);
        do {
          add(n, S[top]);
        } while (S[top--] != nex);
      }
      low[x] = min(low[x], low[nex]);
    }
  }
}
void CONT(int x, int father) {
  deep[x] = deep[father] + 1;
  fa[x][0] = father;
  for (int i = 1; i <= 20; i++) fa[x][i] = fa[fa[x][i - 1]][i - 1];
  for (int i = 0; i < (int)road[x].size(); i++) {
    int nex = road[x][i];
    if (nex == father) continue;
    CONT(nex, x);
  }
}
int lca(int x, int y) {
  if (deep[x] < deep[y]) swap(x, y);
  int now = 20;
  while (deep[x] > deep[y]) {
    if ((deep[x] - deep[y]) >= (1 << now)) x = fa[x][now];
    now--;
  }
  now = 20;
  while (now--) {
    if (fa[x][now] != fa[y][now]) {
      x = fa[x][now];
      y = fa[y][now];
    }
  }
  if (x != y) x = fa[x][0];
  return x;
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &u, &v);
    path[u].push_back(v);
    path[v].push_back(u);
  }
  DFS(1, 0);
  CONT(1, 0);
  for (int i = 1; i <= q; i++) {
    scanf("%d%d", &u, &v);
    int r = lca(u, v);
    printf("%d\n", (deep[u] + deep[v] - deep[r] * 2) / 2);
  }
}
