func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   inline void smn(T &a, const T &b) {     if (b < a) a = b;   }   template <class T>   inline void smx(T &a, const T &b) {     if (b > a) a = b;   }   template <class T>   inline T rev(const T &a) {     T _ = a;     reverse(_.begin(), _.end());     return _;   }   const double eps = 1e-9;   const long double leps = 1e-14;   const int MN = 5000 + 100, MOD = 1000 * 1000 * 1000 + 7;   vector<int> dis;   int n;   int dt[MN][MN];   pair<int, int> point[MN];   int mk = 1, now;   int mark[MN];   int v[MN];   int d(pair<int, int> a, pair<int, int> b) {     return abs(a.first - b.first) + abs(a.second - b.second);   }   void dfs(int a) {     mark[a] = mk;     for (int i = 0; i < n; i++)       if (dt[a][i] > now && mark[i] != mk) v[i] = 1 - v[a], dfs(i);   }   bool av(int a) {     now = a;     for (int i = 0; i < n; i++)       if (mark[i] != mk) v[i] = 0, dfs(i);     mk++;     for (int i = 0; i < n; i++)       for (int j = 0; j < n; j++)         if (dt[i][j] > now && v[i] == v[j]) return 0;     return 1;   }   int main(int argc, char *argv[]) {     ios_base::sync_with_stdio(false);     cin >> n;     for (int i = 0; i < n; i++) cin >> point[i].first >> point[i].second;     for (int i = 0; i < n; i++)       for (int j = 0; j < n; j++) dt[i][j] = d(point[i], point[j]);     int s = 0, e = 10000;     int res = 10000;     while (s <= e) {       int m = (s + e) / 2;       if (av(m))         smn(res, m), e = m - 1;       else         s = m + 1;     }     now = res;     cout << now <<   n ;     int rn = 1;     for (int i = 0; i < n; i++)       if (mark[i] != mk) dfs(i), rn = (2LL * rn) % MOD;     cout << rn <<   n ;     return 0;   }   