func_code_string: #include <bits/stdc++.h>   using namespace std;   const int dx[8] = {0, 0, -1, -1, -1, 1, 1, 1};   const int dy[8] = {-1, 1, -1, 0, 1, -1, 0, 1};   int r, c, n, res, a, b, f[18000005];   bool vis[3001][6001], g[3001][6001];   stack<pair<int, int> > stk;   void init() {     for (int i = 0; i < r * c; ++i) f[i] = i;   }   int F(int x) {     if (f[x] == x) return x;     stk.push(pair<int, int>(x, f[x]));     return f[x] = F(f[x]);   }   void U(int a, int b) {     int fa = F(a), fb = F(b);     stk.push(pair<int, int>(fa, f[fa]));     f[fa] = fb;   }   int main() {     scanf( %d%d%d , &r, &c, &n);     c <<= 1;     init();     for (int i = 0; i < n; ++i) {       scanf( %d%d , &a, &b);       --a;       --b;       while (!stk.empty()) stk.pop();       vis[a][b] = vis[a][b + c / 2] = true;       for (int i = 0; i < 8; ++i) {         int tx = a + dx[i], ty = b + dy[i];         if (ty == -1) ty = c - 1;         if (ty == c) ty = 0;         if (tx < 0 || tx >= r || !vis[tx][ty]) continue;         U(tx * c + ty, a * c + b);       }       b += c / 2;       for (int i = 0; i < 8; ++i) {         int tx = a + dx[i], ty = b + dy[i];         if (ty == -1) ty = c - 1;         if (ty == c) ty = 0;         if (tx < 0 || tx >= r || !vis[tx][ty]) continue;         U(tx * c + ty, a * c + b);       }       b -= c / 2;       if (F(a * c + b) == F(a * c + b + c / 2)) {         vis[a][b] = vis[a][b + c / 2] = false;         while (!stk.empty()) {           f[stk.top().first] = stk.top().second;           stk.pop();         }       } else {         vis[a][b] = vis[a][b + c / 2] = true;         ++res;       }     }     printf( %d n , res);     return 0;   }   