#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
int add(int a, int b) {
  long long x = a + b;
  if (x >= 1000000007) x -= 1000000007;
  if (x < 0) x += 1000000007;
  return x;
}
long long mul(long long a, long long b) { return (a * b) % 1000000007; }
long long pw(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = (ans * a) % 1000000007;
    a = (a * a) % 1000000007;
    b >>= 1;
  }
  return ans;
}
vector<int> v[100002], v2[200002];
int n, m, q;
int level[200002], minim[200002];
int stramos[30][200002];
int componentCnt = 0;
stack<pair<int, int> > edges;
void addComp(int x, int y) {
  componentCnt++;
  int a, b;
  while (1) {
    a = edges.top().first;
    b = edges.top().second;
    edges.pop();
    v2[componentCnt].push_back(b);
    v2[b].push_back(componentCnt);
    if (a == x && b == y) {
      v2[componentCnt].push_back(a);
      v2[a].push_back(componentCnt);
      return;
    }
  }
}
void dfs(int nod, int dad, int nivel) {
  level[nod] = minim[nod] = nivel;
  for (int i = 0; i < v[nod].size(); ++i) {
    int x = v[nod][i];
    if (x == dad) continue;
    if (level[x] == 0) {
      edges.push({nod, x});
      dfs(x, nod, nivel + 1);
      if (minim[x] >= nivel) addComp(nod, x);
      minim[nod] = min(minim[nod], minim[x]);
    } else
      minim[nod] = min(minim[nod], level[x]);
  }
}
void dfs2(int nod, int dad, int nivel) {
  stramos[0][nod] = dad;
  level[nod] = nivel;
  for (int i = 1; i < 20; ++i)
    stramos[i][nod] = stramos[i - 1][stramos[i - 1][nod]];
  for (int i = 0; i < v2[nod].size(); ++i) {
    int x = v2[nod][i];
    if (x == dad) continue;
    dfs2(x, nod, nivel + 1);
  }
}
int lca(int a, int b) {
  if (level[a] <= level[b]) swap(a, b);
  int dif = level[a] - level[b];
  for (int step = 20; step >= 0; --step)
    if (dif & (1 << step)) a = stramos[step][a];
  if (a == b) return a;
  for (int step = 20; step >= 0; --step)
    if (stramos[step][a] != stramos[step][b]) {
      a = stramos[step][a];
      b = stramos[step][b];
    }
  return stramos[0][a];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m >> q;
  componentCnt = n;
  for (int i = 1; i <= m; ++i) {
    int a, b;
    cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
  }
  dfs(1, 0, 1);
  dfs2(1, 0, 1);
  for (int i = 1; i <= q; ++i) {
    int a, b;
    cin >> a >> b;
    int ans = (level[a] + level[b] - 2 * level[lca(a, b)]);
    cout << ans / 2 << '\n';
  }
  return 0;
}
