#include <bits/stdc++.h>
inline int min(int a, int b) { return a < b ? a : b; }
inline int max(int a, int b) { return a > b ? a : b; }
namespace Tree {
int head[100010 << 1], cnt;
struct Edge {
  int to, nxt;
} e[100010 << 2];
inline void addE(int a, int b) {
  e[++cnt] = (Edge){b, head[a]};
  head[a] = cnt;
  e[++cnt] = (Edge){a, head[b]};
  head[b] = cnt;
}
int nodenum, n;
int dep[100010 << 1], sum[100010 << 1], fa[19][100010 << 1];
void dfs(int u) {
  for (int i = 1; i < 19; i++) fa[i][u] = fa[i - 1][fa[i - 1][u]];
  for (int i = head[u]; i; i = e[i].nxt) {
    int v = e[i].to;
    if (v != fa[0][u]) {
      fa[0][v] = u;
      dep[v] = dep[u] + 1;
      sum[v] = sum[u] + (v > n);
      dfs(v);
    }
  }
}
inline int LCA(int x, int y) {
  if (x == y) return x;
  if (dep[x] < dep[y]) std::swap(x, y);
  for (int i = dep[x] - dep[y]; i; i &= i - 1) x = fa[__builtin_ctz(i)][x];
  if (x == y) return x;
  for (int i = 19 - 1; ~i; i--)
    if (fa[i][x] != fa[i][y]) x = fa[i][x], y = fa[i][y];
  return fa[0][x];
}
inline int ask(int x, int y) {
  int lca = LCA(x, y);
  return sum[x] + sum[y] - (sum[lca] << 1) + (lca > n);
}
void init(int __n) {
  n = __n;
  sum[1] = 0;
  dfs(1);
}
}  // namespace Tree
namespace Graph {
int head[100010], cnt;
struct Edge {
  int to, nxt;
} e[500010 << 1];
inline void addE(int a, int b) {
  e[++cnt] = (Edge){b, head[a]};
  head[a] = cnt;
  e[++cnt] = (Edge){a, head[b]};
  head[b] = cnt;
}
using Tree::nodenum;
int DFN[100010], low[100010], idx;
int S[100010], top;
void tarjan(int u) {
  DFN[u] = low[u] = ++idx;
  S[++top] = u;
  for (int i = head[u]; i; i = e[i].nxt) {
    int v = e[i].to;
    if (!DFN[v]) {
      tarjan(v);
      low[u] = min(low[u], low[v]);
      if (low[v] >= DFN[u]) {
        nodenum++;
        Tree::addE(nodenum, u);
        do {
          v = S[top--];
          Tree::addE(nodenum, v);
        } while (v != e[i].to);
      }
    } else
      low[u] = min(low[u], DFN[v]);
  }
}
void init(int n) {
  tarjan(1);
  Tree::init(n);
}
}  // namespace Graph
int n, m, Q;
int main() {
  scanf("%d%d%d", &n, &m, &Q);
  Tree::nodenum = Tree::n = n;
  for (int i = 0, a, b; i < m; i++) {
    scanf("%d%d", &a, &b);
    Graph::addE(a, b);
  }
  Graph::init(n);
  while (Q-- > 0) {
    int u, v;
    scanf("%d%d", &u, &v);
    printf("%d\n", Tree::ask(u, v));
  }
  return 0;
}
