#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  char ch = getchar();
  bool positive = 1;
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') positive = 0;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  return positive ? x : -x;
}
const int INF = ~0U >> 1, MOD = 1000000007;
int N;
pair<int, int> a[5005];
inline int dist(pair<int, int> A, pair<int, int> B) {
  return max(abs(A.first - B.first), abs(A.second - B.second));
}
inline void update(int &first, int second) {
  first += second;
  if (first >= MOD) first -= MOD;
}
inline pair<int, int> work(pair<int, int> A, pair<int, int> B) {
  int ans = 0;
  for (int i = 1; i <= N; ++i)
    ans = max(ans, min(dist(A, a[i]), dist(B, a[i])));
  int tot = 1;
  for (int i = 1; i <= N; ++i)
    if (dist(A, a[i]) <= ans && dist(B, a[i]) <= ans) update(tot, tot);
  return make_pair(ans, tot);
}
int main() {
  N = read();
  int x0 = INF, y0 = INF, x1 = -INF, y1 = -INF;
  for (int i = 1; i <= N; ++i) {
    int first = read(), second = read();
    a[i].first = first + second, a[i].second = first - second;
    x0 = min(x0, a[i].first), x1 = max(x1, a[i].first);
    y0 = min(y0, a[i].second), y1 = max(y1, a[i].second);
  }
  pair<int, int> ans0 = work(make_pair(x0, y0), make_pair(x1, y1));
  pair<int, int> ans1 = work(make_pair(x0, y1), make_pair(x1, y0));
  if (ans0.first == ans1.first && ans0.first < min(abs(x0 - x1), abs(y0 - y1)))
    update(ans0.second, ans1.second);
  else if (ans0.first > ans1.first)
    ans0 = ans1;
  update(ans0.second, ans0.second);
  printf("%d\n%d\n", ans0.first, ans0.second);
  return 0;
}
