#include <bits/stdc++.h>
using namespace std;
vector<int> s[222222], ss[222222];
int n, m, cnt, cnt2, h;
int up[222222][22], fa[222222], deep[211111], q[211111], dfn[211111],
    low[211111];
void tarjan(int x) {
  int c, i, y;
  dfn[x] = low[x] = ++cnt;
  q[h] = x;
  h++;
  c = s[x].size();
  for (i = 0; i < c; i++) {
    y = s[x][i];
    if (dfn[y] == 0) {
      tarjan(y);
      low[x] = min(low[x], low[y]);
      if (low[y] >= dfn[x]) {
        cnt2++;
        while (h > 0) {
          h--;
          ss[cnt2].push_back(q[h]);
          ss[q[h]].push_back(cnt2);
          if (q[h] == y) break;
        }
        ss[cnt2].push_back(x);
        ss[x].push_back(cnt2);
      }
    } else
      low[x] = min(low[x], dfn[y]);
  }
}
void make_yfs() {
  int i;
  cnt = 0, h = 0, cnt2 = n;
  tarjan(1);
}
void dfs(int x) {
  int c, i, y;
  c = ss[x].size();
  for (i = 0; i < c; i++) {
    y = ss[x][i];
    if (fa[x] == y) continue;
    fa[y] = up[y][0] = x;
    deep[y] = deep[x] + 1;
    dfs(y);
  }
}
int lca(int x, int y) {
  int tmp = 20;
  if (deep[x] < deep[y]) swap(x, y);
  while (1) {
    if ((1 << tmp) <= deep[x] - deep[y]) x = up[x][tmp];
    tmp--;
    if (tmp < 0) break;
  }
  if (x == y) return x;
  tmp = 20;
  while (1) {
    if (up[x][tmp] != up[y][tmp]) x = up[x][tmp], y = up[y][tmp];
    tmp--;
    if (tmp < 0) break;
  }
  return fa[x];
}
int getdis(int x, int y) {
  int L;
  L = lca(x, y);
  return deep[x] - deep[L] + deep[y] - deep[L];
}
int main() {
  int i, m, x, y, q, ans;
  scanf("%d%d%d", &n, &m, &q);
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    s[x].push_back(y);
    s[y].push_back(x);
  }
  make_yfs();
  dfs(1);
  for (int j = 1; j <= 20; j++)
    for (i = 1; i <= cnt2; i++) up[i][j] = up[up[i][j - 1]][j - 1];
  while (q--) {
    scanf("%d%d", &x, &y);
    ans = getdis(x, y) / 2;
    printf("%d\n", ans);
  }
  return 0;
}
