#include <bits/stdc++.h>
using namespace std;
const int N = 100005, M = 500005, Q = 200005;
const int K = 21;
int n, m, q;
struct edge {
  int to, nxt;
} graph[M << 1];
int head[N], cnt = 0;
void addedge(int u, int v) {
  edge node = {v, head[u]};
  graph[head[u] = ++cnt] = node;
}
int dfn[N], low[N], tot = 0;
stack<pair<int, int> > s;
int sccno[N], t = 0;
vector<int> scc[N];
void dfs(int u, int fa) {
  dfn[u] = low[u] = ++tot;
  for (int i = head[u]; i; i = graph[i].nxt) {
    int v = graph[i].to;
    if (!dfn[v]) {
      s.push(make_pair(u, v));
      dfs(v, u), low[u] = min(low[u], low[v]);
      if (low[v] >= dfn[u]) {
        t++;
        for (;;) {
          pair<int, int> x = s.top();
          if (sccno[x.first] != t)
            sccno[x.first] = t, scc[t].push_back(x.first);
          if (sccno[x.second] != t)
            sccno[x.second] = t, scc[t].push_back(x.second);
          s.pop();
          if (x.first == u && x.second == v) break;
        }
      }
    } else if (v != fa && dfn[v] < dfn[u])
      low[u] = min(low[u], dfn[v]);
  }
}
vector<int> tree[N << 1];
int father[N << 1][K], logn = 0;
int prefix[N << 1], depth[N << 1];
void dfs_tree(int u, int fa) {
  for (int i = 0; i < tree[u].size(); i++) {
    int v = tree[u][i];
    if (v != fa) {
      prefix[v] += prefix[u], depth[v] = depth[u] + 1;
      father[v][0] = u, dfs_tree(v, u);
    }
  }
}
int lca(int u, int v) {
  if (depth[u] < depth[v]) swap(u, v);
  for (int i = logn; i >= 0; i--)
    if (depth[father[u][i]] >= depth[v]) u = father[u][i];
  if (u == v) return u;
  for (int i = logn; i >= 0; i--)
    if (father[u][i] != father[v][i]) u = father[u][i], v = father[v][i];
  return father[u][0];
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= n; i++) head[i] = dfn[i] = low[i] = sccno[i] = 0;
  for (int i = 1; i <= m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    addedge(u, v), addedge(v, u);
  }
  dfs(1, 0);
  for (int i = 1; i <= t; i++) {
    for (int j = 0; j < scc[i].size(); j++)
      tree[n + i].push_back(scc[i][j]), tree[scc[i][j]].push_back(n + i);
  }
  for (int i = 1; i <= n + t; i++) prefix[i] = (i > n), father[i][0] = 0;
  depth[n + t] = 0, dfs_tree(n + t, 0);
  for (int i = 0; (1 << i) <= n; logn = i++)
    ;
  for (int i = 1; i <= logn; i++) {
    for (int j = 1; j <= n + t; j++)
      father[j][i] = father[father[j][i - 1]][i - 1];
  }
  for (int i = 1; i <= q; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    int w = lca(u, v);
    int ans = prefix[u] + prefix[v] - (prefix[w] << 1);
    if (w > n) ans++;
    printf("%d\n", ans);
  }
  return 0;
}
