#include <bits/stdc++.h>
using namespace std;
const int maxn = 5005;
const int mod = 1e9 + 7;
vector<int> e[maxn];
int v[maxn], n, val, cur;
struct point {
int x, y;
}a[maxn];
int dis(int i, int j) {
int A = a[i].x - a[j].x;
int B = a[i].y - a[j].y;
return abs(A)+ abs(B);
}
bool dfs(int x, int c) {
v[x] = c;
for(auto y : e[x]) {
if(v[y] == c) return 0;
if(!v[y] && !dfs(y, 3 - c)) return 0;
}
return 1;
}
bool check(int mid) {
for(int i = 0; i <= n; i++) {
e[i].clear();
e[i].shrink_to_fit();
}
for(int i = 1; i <= n; i++)
for(int j = 1; j < i; j++) {
int len = dis(i, j);
if(len > mid) {
e[i].push_back(j);
e[j].push_back(i);
}
}
memset(v, 0, sizeof v);
int cnt = 0;
for(int i = 1; i <= n; i++) {
if(!v[i]) {
cnt++;
if(!dfs(i, 1)) return 0;
}
}
val = mid, cur = cnt;
return 1;
}
int main() {
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i].x >> a[i].y;
int l = 0, r = 10000;
while(l <= r) {
int mid = l + r >> 1;
if(check(mid)) r = mid - 1;
else l = mid + 1;
}
cout << val << endl << cur % mod;
return 0;
}