#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
using namespace std;
int n, t = 0, k, prevk;
vector <int> X(1e5);
vector <int> Y(1e5);
map <int, vector <pair <int, int>>> mX;
map <int, vector <pair <int, int>>> mY;
priority_queue <pair <int, pair <int, int>>> pq;
vector <int> p(1e5);
vector <int> sz(1e5, 1);
int HOLVAN(int a) {
if (a == p[a]) return a;
return p[a] = HOLVAN(p[a]);
}
void UNIO(int a, int b) {
if (sz[a] < sz[b]) swap(a, b);
p[b] = a;
sz[a] += sz[b];
k--;
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++) {
cin >> X[i] >> Y[i];
mX[X[i]].push_back({ Y[i],i });
mY[Y[i]].push_back({ X[i],i });
}
int a, b, w;
for (auto p : mX) {
vector<pair<int, int>>& v = p.second;
sort(v.begin(), v.end());
for (int j = 1; j < v.size(); j++) {
a = v[j - 1].second;
b = v[j].second;
w = v[j].first - v[j - 1].first;
pq.push({ -w,{a,b} });
}
}
for (auto p : mY) {
vector<pair<int, int>>& v = p.second;
sort(v.begin(), v.end());
for (int j = 1; j < v.size(); j++) {
a = v[j - 1].second;
b = v[j].second;
w = v[j].first - v[j - 1].first;
pq.push({ -w,{a,b} });
}
}
k = n;
for (int i = 0; i < n; i++) p[i] = i;
while (pq.size()) {
a = pq.top().second.first;
b = pq.top().second.second;
w = -pq.top().first;
pq.pop();
a = HOLVAN(a);
b = HOLVAN(b);
if (a == b) continue;
if (w > t) { t = w; prevk = k; }
UNIO(a, b);
if (k == 1) break;
}
cout << t << endl << prevk - 1;
}