func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e3 + 2, M = 1e6 + 2;   int n, m, X[N << 1], Y[N << 1], C[N][N];   void Merge(vector<pair<int, pair<int, int> > > &v) {     sort(v.begin(), v.end());     int q = 0;     for (int i = 1; i < (int)(v.size()); i++) {       if (v[i].first != v[q].first || v[i].second.first > v[q].second.second)         v[++q] = v[i];       else         v[q].second.second = v[i].second.second;     }     v.resize(q + 1);   }   bool Check(int t) {     vector<pair<int, pair<int, int> > > hor, ver;     for (int i = 0; i < m; i++)       for (int j = 0; j < m; j++) C[i][j] = 0;     for (int i = 0; i < n; i++)       hor.push_back(make_pair(Y[i], make_pair(X[i] - 2 * t, X[i] + 2 * t)));     for (int i = n; i < n + m; i++)       ver.push_back(make_pair(X[i], make_pair(Y[i] - 2 * t, Y[i] + 2 * t)));     Merge(hor), Merge(ver);     for (pair<int, pair<int, int> > a : hor) {       vector<int> adj;       for (int i = 0; i < (int)(ver.size()); i++) {         pair<int, pair<int, int> > b = ver[i];         if (b.second.first <= a.first && a.first <= b.second.second &&             a.second.first <= b.first && b.first <= a.second.second) {           for (int j : adj)             if (C[i][j]++) return true;           adj.push_back(i);         }       }     }     return false;   }   int main() {     ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);     cin >> n >> m;     for (int i = 0; i < n + m; i++) {       cin >> X[i] >> Y[i];       int x = X[i] - Y[i], y = X[i] + Y[i];       X[i] = x, Y[i] = y;     }     int dw = 0, up = M;     while (up - dw > 1) {       int md = (dw + up) >> 1;       if (Check(md))         up = md;       else         dw = md;     }     if (up == M)       cout <<  Poor Sereja!  << endl;     else       cout << up << endl;     return 0;   }   