#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
using namespace std;
int a, b, c, d, n, m, k;
pair<int, int> mas[300002];
int fnd(const vector<pair<int, int> > &a) {
  int ans = 0;
  for (int _n(((int)((a).size())) - 1), i(0); i <= _n; i++) {
    int ni = i + 1;
    if (ni == (int)((a).size())) ni = 0;
    ans += abs(a[i].first - a[ni].first) + abs(a[i].second - a[ni].second);
  }
  return ans;
}
int main() {
  scanf("%d", &n);
  int minX = 1000000000, maxX = -1000000000, minY = 1000000000,
      maxY = -1000000000;
  int minS = 1000000000, maxS = -1000000000, minD = 1000000000,
      maxD = -1000000000;
  for (int _n((n)-1), i(0); i <= _n; i++) {
    scanf("%d%d", &mas[i].first, &mas[i].second);
    minX = min(minX, mas[i].first);
    maxX = max(maxX, mas[i].first);
    minY = min(minY, mas[i].second);
    maxY = max(maxY, mas[i].second);
    minS = min(minS, mas[i].first + mas[i].second);
    maxS = max(maxS, mas[i].first + mas[i].second);
    minD = min(minD, mas[i].first - mas[i].second);
    maxD = max(maxD, mas[i].first - mas[i].second);
  }
  vector<pair<int, int> > p;
  int minX2 = 1000000000, maxX2 = -1000000000, minY2 = 1000000000,
      maxY2 = -1000000000;
  for (int _n((n)-1), i(0); i <= _n; i++) {
    if (mas[i].first == minX || mas[i].first == maxX || mas[i].second == minY ||
        mas[i].second == maxY || mas[i].first + mas[i].second == minS ||
        mas[i].first + mas[i].second == maxS ||
        mas[i].first - mas[i].second == minD ||
        mas[i].first - mas[i].second == maxD)
      p.push_back(mas[i]);
    else {
      minX2 = min(minX2, mas[i].first);
      maxX2 = max(maxX2, mas[i].first);
      minY2 = min(minY2, mas[i].second);
      maxY2 = max(maxY2, mas[i].second);
    }
  }
  p.clear();
  for (int _n((n)-1), i(0); i <= _n; i++) {
    if (mas[i].first == minX || mas[i].first == maxX || mas[i].second == minY ||
        mas[i].second == maxY || mas[i].first + mas[i].second == minS ||
        mas[i].first + mas[i].second == maxS ||
        mas[i].first - mas[i].second == minD ||
        mas[i].first - mas[i].second == maxD)
      p.push_back(mas[i]);
    else if (mas[i].first == minX2 || mas[i].first == maxX2 ||
             mas[i].second == minY2 || mas[i].second == maxY2) {
      p.push_back(mas[i]);
    }
  }
  int best = 0;
  for (int _n(((int)((p).size())) - 1), i(0); i <= _n; i++) {
    for (int _n((i)-1), j(0); j <= _n; j++) {
      for (int _n((j)-1), z(0); z <= _n; z++) {
        for (int _n((z)-1), l(0); l <= _n; l++) {
          int cur = fnd({p[i], p[j], p[z], p[l]});
          best = max(best, cur);
        }
      }
    }
  }
  int a3 = 0;
  for (int _n(((int)((p).size())) - 1), i(0); i <= _n; i++) {
    for (int _n((i)-1), j(0); j <= _n; j++) {
      for (int _n((j)-1), z(0); z <= _n; z++) {
        int cur = fnd({p[i], p[j], p[z]});
        a3 = max(a3, cur);
      }
    }
  }
  vector<pair<int, int> > tmp(3);
  for (int _n((n)-1), i(0); i <= _n; i++) {
    tmp[0] = mas[i];
    for (int _n(((int)((p).size())) - 1), j(0); j <= _n; j++) {
      if (p[j] == mas[i]) continue;
      tmp[1] = p[j];
      for (int _n((j)-1), z(0); z <= _n; z++) {
        if (p[z] == mas[i]) continue;
        tmp[2] = p[z];
        int cur = fnd(tmp);
        a3 = max(a3, cur);
      }
    }
  }
  for (int _n(n), i(3); i <= _n; i++) {
    if (i > 3) printf(" ");
    if (i == 3)
      printf("%d", a3);
    else
      printf("%d", best);
  }
  printf("\n");
}
