#include <bits/stdc++.h>
using namespace std;
const int SZ = 2000010;
const int INF = 1e9 + 10;
const int mod = 1e9 + 7;
const long double eps = 1e-8;
long long read() {
  long long n = 0;
  char a = getchar();
  bool flag = 0;
  while (a > '9' || a < '0') {
    if (a == '-') flag = 1;
    a = getchar();
  }
  while (a <= '9' && a >= '0') {
    n = n * 10 + a - '0', a = getchar();
  }
  if (flag) n = -n;
  return n;
}
vector<int> g2[SZ];
vector<int> g[SZ];
int n, m, q;
int ccnt = 0;
int dfn[SZ], low[SZ], dfs_clock;
stack<int> S;
bool cut[SZ], ins[SZ];
void Tarjan(int u, int f) {
  dfn[u] = low[u] = ++dfs_clock;
  S.push(u);
  ins[u] = 1;
  int child = 0;
  for (int i = 0; i < g2[u].size(); i++) {
    int v = g2[u][i];
    if (v == f) continue;
    if (!dfn[v]) {
      child++;
      Tarjan(v, u);
      low[u] = min(low[u], low[v]);
      if (low[v] >= dfn[u]) {
        ccnt++;
        cut[u] = 1;
        int x;
        do {
          x = S.top();
          S.pop();
          ins[x] = 0;
          g[ccnt + n].push_back(x);
          g[x].push_back(ccnt + n);
        } while (x != v && !S.empty());
        g[ccnt + n].push_back(u);
        g[u].push_back(ccnt + n);
      }
    } else if (ins[v]) {
      low[u] = min(low[u], dfn[v]);
    }
  }
  if (f == 0 && child == 1) cut[u] = 0;
}
int anc[SZ][22], deep[SZ];
void dfsLca(int u, int f) {
  deep[u] = deep[f] + 1;
  anc[u][0] = f;
  for (int i = 1; anc[u][i - 1]; i++) anc[u][i] = anc[anc[u][i - 1]][i - 1];
  for (int i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v == f) continue;
    dfsLca(v, u);
  }
}
int askLca(int u, int v) {
  if (deep[u] < deep[v]) swap(u, v);
  int dd = deep[u] - deep[v];
  for (int i = 20; i >= 0; i--)
    if (dd >> i & 1) u = anc[u][i];
  if (u == v) return u;
  for (int i = 20; i >= 0; i--)
    if (anc[u][i] != anc[v][i]) u = anc[u][i], v = anc[v][i];
  return anc[u][0];
}
int main() {
  n = read(), m = read(), q = read();
  for (int i = 1; i <= m; i++) {
    int x = read(), y = read();
    g2[x].push_back(y);
    g2[y].push_back(x);
  }
  Tarjan(1, 0);
  n += ccnt;
  dfsLca(1, 0);
  while (q--) {
    int x = read(), y = read();
    int lca = askLca(x, y);
    int ans = deep[x] + deep[y] - 2 * deep[lca];
    printf("%d\n", ans / 2);
  }
  return 0;
}
