1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <bits/stdc++.h>
#define uset unordered_set
#define mt make_tuple
#define pii pair<int,int>
#define f first
#define s second
using namespace std;

bool Dfs(int u,vector<bool>&Vis,vector<int>&M,vector<uset<int>>&G)
{
    if(Vis[u])
        return false;
    Vis[u]=true;
    for(int v:G[u])
        if(M[v]==-1 || Dfs(M[v],Vis,M,G))
        {
			M[u]=v;
			M[v]=u;
			return true;
		}
    return false;
}

void Turbo(int n,vector<int>&M,vector<uset<int>>&G)
{
    for(int i=0;i<n;i++)
        M[i]=-1;
    vector<bool>Vis(n);
    bool increased=true;
    while(increased)
    {
        increased=false;
        for(int u=0;u<n;u++)
            Vis[u]=false;
        for(int u=0;u<n;u++)
            if(M[u]==-1 && Dfs(u,Vis,M,G))
                increased=true;
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,m,q;
    cin>>n>>m>>q;
    vector<vector<int>>M(n,vector<int>(n,0));
    for(int i=0;i<m;i++)
    {
        int x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        for(int i=x1-1;i<x2;i++)
            for(int j=y1-1;j<y2;j++)
                M[i][j]++;
    }
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            M[i][j]%=2;
    vector<uset<int>>G(n*n);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            for(int k=0;k<n;k++)
                if(M[k][j]!=M[i][j])
                    G[i*n+j].insert(k*n+j);
            for(int k=0;k<n;k++)
                if(M[i][k]!=M[i][j])
                    G[i*n+j].insert(i*n+k);
        }
    }
    vector<int>Wyn(n*n,-1);
    Turbo(n*n,Wyn,G);
    long long wynik=0;
    for(int i=0;i<n*n;i++)
        if(Wyn[i]>=0)
            wynik++;
    cout<<wynik/2<<"\n";
    /*for(int i=0;i<n*n;i++)
    {
        cout<<i+1<<": ";
        for(int j=0;j<G[i].size();j++)
            cout<<G[i][j]+1<<" ";
        cout<<endl;
    }*/
    for(int p=0;p<q;p++)
    {
        int a1,b1;
        cin>>a1>>b1;
        a1--; b1--;
        int g=a1*n+b1;
        M[a1][b1]=1-M[a1][b1];
        for(int k=0;k<n;k++)
        {
            if(M[a1][k]==M[a1][b1])
            {
                G[a1*n+k].erase(g);
                G[g].erase(a1*n+k);
            }
            else
            {
                G[a1*n+k].insert(g);
                G[g].insert(a1*n+k);
            }
        }
        for(int k=0;k<n;k++)
        {
            if(M[k][b1]==M[a1][b1])
            {
                G[k*n+b1].erase(g);
                G[g].erase(k*n+b1);
            }
            else
            {
                G[k*n+b1].insert(g);
                G[g].insert(k*n+b1);
            }
        }
        fill(Wyn.begin(),Wyn.end(),-1);
        Turbo(n*n,Wyn,G);
        long long wynik=0;
        for(int i=0;i<n*n;i++)
            if(Wyn[i]>=0)
                wynik++;
        cout<<wynik/2<<"\n";
    }
    return 0;
}