#include <bits/stdc++.h>
using namespace std;
const long long INF = 0x3f3f3f3f;
const int N = 2e5 + 10;
const long long mod = 1e9 + 7;
const bool debug = false;
vector<pair<int, int> > son[N];
vector<pair<int, int> > vc[N];
stack<int> s;
int n, m, q;
int now_time, tin[N], low[N], tmp[N], cnt;
void dfs(int o, int id) {
  tin[o] = low[o] = ++now_time;
  for (int i = 0, v; i < son[o].size(); ++i) {
    pair<int, int> nt = son[o][i];
    v = nt.first;
    if (id == nt.second) continue;
    if (!tin[v]) {
      s.push(o);
      dfs(v, nt.second);
      low[o] = min(low[o], low[v]);
      if (low[v] > tin[o]) {
        vc[o].push_back({v, 1});
        s.pop();
      }
      if (low[v] == tin[o]) {
        ++cnt;
        while (true) {
          int now = s.top();
          s.pop();
          if (now == o) {
            vc[o].push_back({cnt, 0});
            break;
          } else {
            if (tmp[now] == cnt) continue;
            vc[cnt].push_back({now, 1});
            tmp[now] = cnt;
          }
        }
      }
    } else if (tin[v] < tin[o]) {
      s.push(o);
      low[o] = min(tin[v], low[o]);
    }
  }
}
int fa[N][20], dp[N][20], deep[N];
void dfs1(int o) {
  for (int j = 0; j < vc[o].size(); ++j) {
    pair<int, int> it = vc[o][j];
    deep[it.first] = deep[o] + 1;
    fa[it.first][0] = o;
    dp[it.first][0] = it.second;
    for (int i = 1; i < 20; ++i) {
      fa[it.first][i] = fa[fa[it.first][i - 1]][i - 1];
      dp[it.first][i] = dp[it.first][i - 1] + dp[fa[it.first][i - 1]][i - 1];
    }
    dfs1(it.first);
  }
}
int lca(int x, int y) {
  if (deep[x] < deep[y]) swap(x, y);
  int d = deep[x] - deep[y];
  for (int i = 0; i < 20; ++i)
    if ((d >> i) & 1) x = fa[x][i];
  if (x == y) return x;
  for (int i = 19; i >= 0; --i)
    if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
  return fa[x][0];
}
void solve(int x, int y) {
  int u = lca(x, y), d, ans = 0;
  if (u > n) {
    d = deep[x] - deep[u] - 1;
    for (int i = 0; i < 20; ++i)
      if ((d >> i) & 1) {
        ans += dp[x][i];
        x = fa[x][i];
      }
    d = deep[y] - deep[u] - 1;
    for (int i = 0; i < 20; ++i)
      if ((d >> i) & 1) {
        ans += dp[y][i];
        y = fa[y][i];
      }
    ans += 1;
  } else {
    d = deep[x] - deep[u];
    for (int i = 0; i < 20; ++i)
      if ((d >> i) & 1) {
        ans += dp[x][i];
        x = fa[x][i];
      }
    d = deep[y] - deep[u];
    for (int i = 0; i < 20; ++i)
      if ((d >> i) & 1) {
        ans += dp[y][i];
        y = fa[y][i];
      }
  }
  printf("%d\n", ans);
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  cnt = n;
  for (int i = 1, u, v; i <= m; ++i) {
    scanf("%d%d", &u, &v);
    son[u].push_back(pair<int, int>(v, i));
    son[v].push_back(pair<int, int>(u, i));
  }
  dfs(1, -1);
  deep[1] = 1;
  dfs1(1);
  while (q--) {
    int u, v;
    scanf("%d%d", &u, &v);
    solve(u, v);
  }
  return 0;
}
