#include <bits/stdc++.h>
using namespace std;
int Head[1000010], Next[1000010], Go[1000010], Val[1000010], iscut[1000010],
    Len[1000010], Dep[1000010], Fa[400010][21], Cnt = 1, n, m, q;
int Head2[1000010], Next2[1000010], Go2[1000010], Val2[1000010], Cnt2 = 1;
int DFN[1000010], MIN[1000010], ins[1000010], Bel[1000010], vis[1000010],
    tim = 0, tt = 0;
vector<int> S;
void addedge(int x, int y) {
  Go[++Cnt] = y;
  Next[Cnt] = Head[x];
  Head[x] = Cnt;
}
void addedge2(int x, int y, int v) {
  Go2[++Cnt2] = y;
  Next2[Cnt2] = Head2[x];
  Head2[x] = Cnt2;
  Val2[Cnt2] = v;
}
void Tarjan(int x, int f = 0) {
  ins[x] = 1;
  S.push_back(x);
  DFN[x] = ++tim;
  MIN[x] = DFN[x];
  int las = x;
  for (int T = Head[x]; T; T = Next[T])
    if (Go[T] != f) {
      if (!DFN[Go[T]]) {
        Tarjan(Go[T], x);
        MIN[x] = min(MIN[x], MIN[Go[T]]);
        if (DFN[x] <= MIN[Go[T]]) {
          tt++;
          for (;;) {
            if (S.back() == las) break;
            addedge2(tt + n + 1, S.back(), 1);
            addedge2(S.back(), tt + n + 1, 1);
            S.pop_back();
          }
          addedge2(x, tt + n + 1, 1);
          addedge2(tt + n + 1, x, 1);
        } else
          las = S.back();
      } else if (ins[Go[T]])
        MIN[x] = min(MIN[x], DFN[Go[T]]);
    }
  ins[x] = 0;
}
void DFS2(int x, int dep = 1, int len = 0) {
  vis[x] = 1;
  Len[x] = len;
  Dep[x] = dep;
  for (int T = Head[x]; T; T = Next[T])
    if (!vis[Go[T]]) {
      Fa[Go[T]][0] = x;
      DFS2(Go[T], dep + 1, len + Val[T]);
    }
}
int lca(int x, int y) {
  if (Dep[x] < Dep[y]) swap(x, y);
  int det = Dep[x] - Dep[y];
  for (int i = 18; i >= 0; i--)
    if ((det >> i) & 1) x = Fa[x][i];
  if (x == y) return x;
  for (int i = 18; i >= 0; i--)
    if (Fa[x][i] != Fa[y][i]) x = Fa[x][i], y = Fa[y][i];
  return Fa[x][0];
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    addedge(a, b);
    addedge(b, a);
  }
  for (int i = 1; i <= n; i++)
    if (!DFN[i]) Tarjan(i);
  memcpy(Head, Head2, sizeof Head);
  memcpy(Next, Next2, sizeof Next);
  memcpy(Go, Go2, sizeof Go);
  memcpy(Val, Val2, sizeof Val);
  for (int i = 1; i <= n + tt + 1; i++)
    if (!vis[i]) DFS2(i);
  for (int i = 1; i <= 20; i++)
    for (int j = 1; j <= n + tt + 1; j++) Fa[j][i] = Fa[Fa[j][i - 1]][i - 1];
  for (int i = 1; i <= q; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d\n", (Len[a] + Len[b] - 2 * Len[lca(a, b)]) / 2);
  }
  return 0;
}
