func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 5001, M = 1e9 + 7;   int n, F, vis[maxn], T = 1, mid, a[maxn], b[maxn], w[maxn][maxn], ans = 1;   vector<int> g[maxn];   bool C[maxn];   bool dfs(int v) {     vis[v] = T;     for (int i = 0; i < g[v].size(); i++)       if (vis[g[v][i]] != T) {         C[g[v][i]] = !C[v];         if (!dfs(g[v][i])) return false;       } else if (C[g[v][i]] == C[v])         return false;     return true;   }   inline bool check(int x) {     for (int i = 1; i <= n; i++) g[i].resize(0);     for (int i = 1; i <= n; i++)       for (int j = i + 1; j <= n; j++)         if (w[i][j] > x) g[i].push_back(j), g[j].push_back(i);     T++;     for (int i = 1; i <= n; i++)       if (vis[i] != T)         if (!dfs(i)) return false;     return true;   }   inline void bs(int f, int l) {     while (f != l) {       mid = (f + l) / 2;       if (check(mid))         l = mid;       else         f = mid + 1;     }     check(f);     F = f;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %d%d , a + i, b + i);     for (int i = 1; i <= n; i++)       for (int j = i + 1; j <= n; j++)         w[i][j] = abs(a[i] - a[j]) + abs(b[i] - b[j]);     bs(0, 7500);     T++;     ans = 1;     for (int i = 1; i <= n; i++)       if (vis[i] != T) dfs(i), ans = (ans << 1) % M;     printf( %d n%d n , F, ans);     return 0;   }   