#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
vector<int> grafo[MAXN];
int marc[MAXN], comp[MAXN], sizeComp[MAXN];
int qtdComp;
void dfs(int v) {
    marc[v] = 1;
    comp[v] = qtdComp;
    sizeComp[qtdComp]++;
    for(int i = 0; i < grafo[v].size(); i++) {
        int viz = grafo[v][i];
        if(marc[viz] == 0) {
            dfs(viz);
        }
    }
}
int main() {
    int n, m, q; scanf("%d %d %d", &n, &m, &q);
    for(int i = 1; i <= m; i++) {
        int a, b; scanf("%d %d", &a, &b);
        grafo[a].push_back(b);
        grafo[b].push_back(a);
    }
    qtdComp = 0;
    for(int i = 1; i <= n; i++) {
        if(marc[i] == 0) {
            qtdComp++;
            dfs(i);
        }
    }
    for(int i = 1; i <= q; i++) {
        int a, b; scanf("%d %d", &a, &b);
        int ca = comp[a];
        int cb = comp[b];
        if(ca == cb) {
            printf("-1\n");
        } else {
            long long qa = sizeComp[ca];
            long long tot = ((long long) n * (n - 1))/2LL;
            long long respa = tot - (qa * (n - qa)) - m;
            
            long long qb = sizeComp[cb];
            long long respb = tot - (qb * (n - qb)) - m;
            printf("%lld\n", max(respa, respb));
        }
    }
}