func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 0x0f0f0f0f;   template <class S, class T>   inline pair<S, T> MP(S a, T b) {     return make_pair(a, b);   }   template <class T>   inline auto LX(T &X) -> decltype((X.first)) {     return X.first;   }   template <class T>   inline auto LX(const T &X) -> const decltype((X.first)) {     return X.first;   }   template <class T>   inline auto RX(T &X) -> decltype((X.second)) {     return X.second;   }   template <class T>   inline auto RX(const T &X) -> const decltype((X.second)) {     return X.second;   }   template <class T>   inline void RST(T &a) {     memset(a, 0, sizeof(a));   }   template <class T>   inline void RST1(T &a) {     memset(a, -1, sizeof(a));   }   template <class T>   inline void SINF(T &a) {     memset(a, 0x0f, sizeof(a));   }   template <class S, class T>   inline void RST(S &a, T b) {     fill((T *)a, (T *)a + (sizeof(a) / sizeof(b)), b);   }   template <class T>   inline void CLR(T &a) {     a.clear();   }   template <class S, class T>   inline void CPY(S &a, T &b) {     memcpy(a, b, sizeof(a));   }   template <class S, class T>   inline bool chkmin(S &a, T b) {     return b < a ? a = b, 1 : 0;   }   template <class S, class T>   inline bool chkmax(S &a, T b) {     return a < b ? a = b, 1 : 0;   }   template <class T>   inline T sqr(T x) {     return x * x;   }   template <class T>   inline int SZ(T &a) {     return (int)(a.size());   }   template <class T>   inline bool EPT(T &a) {     return a.empty();   }   template <class T>   inline auto FRT(T &a) -> decltype((a.front())) {     return a.front();   }   template <class T>   inline auto FRT(const T &a) -> const decltype((a.front())) {     return a.front();   }   template <class T>   inline auto BK(T &a) -> decltype(a.back()) & {     return a.back();   }   template <class T>   inline auto BK(const T &a) -> const decltype((a.back())) {     return a.back();   }   template <class T>   inline auto TOP(T &a) -> decltype((a.top())) {     return a.top();   }   template <class T>   inline auto TOP(const T &a) -> const decltype((a.top())) {     return a.top();   }   int n, m, nn, k;   int a[310][310], b[310][310];   int r[200010], cr[200010], sz[200010];   vector<pair<int, int> > l[200010];   unordered_map<int, int> c;   int find(int x) { return x == r[x] ? x : r[x] = find(r[x]); }   int d[1010][1010];   deque<pair<int, int> > Q;   int ox, oy;   bool cmp(const pair<int, int> &a, const pair<int, int> &b) {     return d[LX(a) - ox + k][RX(a) - oy + k] < d[LX(b) - ox + k][RX(b) - oy + k];   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i <= n; i++)       for (int j = 1; j <= m; j++) {         int &x = a[i][j];         scanf( %d , &x);         if (x)           if (!c.count(x))             x = c[x] = ++nn;           else             x = c[x];         sz[x]++;       }     for (int i = 1; i <= n; i++)       for (int j = 1; j <= m; j++) {         int &x = b[i][j];         scanf( %d , &x);         if (x != -1) {           if (x)             if (!c.count(x))               x = c[x] = ++nn;             else               x = c[x];           l[a[i][j]].push_back(MP(i, j));         }       }     for (int i = 0; i <= nn; i++) r[i] = cr[i] = i;     k = max(n, m);     int x = k, y = k, t = 0;     for (int i = 1; i < k; i++) {       d[--x][y] = ++t;       for (int j = 1; j < 2 * i; j++) d[x][++y] = ++t;       for (int j = 0; j < 2 * i; j++) d[++x][y] = ++t;       for (int j = 0; j < 2 * i; j++) d[x][--y] = ++t;       for (int j = 0; j < 2 * i; j++) d[--x][y] = ++t;     }     scanf( %d%d , &x, &y);     Q.push_back(MP(x, y));     long long ans = 0;     while (!EPT(Q)) {       int x = LX(FRT(Q)), y = RX(FRT(Q));       Q.pop_front();       int c1 = find(a[x][y]), c2 = find(b[x][y]);       if (!cr[c1] || cr[c1] == b[x][y]) continue;       ox = x, oy = y;       sort(l[c1].begin(), l[c1].end(), cmp);       for (pair<int, int> t : l[c1]) Q.push_back(t);       CLR(l[c1]);       ans += sz[c1];       if (c1 != c2) sz[c2] += sz[c1], r[c1] = c2;       cr[c2] = b[x][y];     }     printf( %I64d n , ans);     return 0;   }   