#include using namespace std; struct Point { int X; int Y; Point() { X = Y = 0; } Point(int x, int y) { X = x; Y = y; } }; int main() { std::ios_base::sync_with_stdio(false); while(true) { int pocet; cin >> pocet; if(cin.eof()) break; Point* points = new Point[pocet]; for(int i = 0; i < pocet; i++) { cin >> points[i].X; cin >> points[i].Y; } int maxDstPt3Idx = -1; int maxDstPt4Idx = -1; int maxDst = 0; for(int i = 0; i < pocet; i++) { for(int j = i + 1; j < pocet; j++) { if(points[i].X == points[j].X) { int newMaxDst = abs(points[i].Y - points[j].Y); if(newMaxDst > maxDst) { int maxDstPt3Idx = -1; int maxDstPt4Idx = -1; for(int k = 0; k < pocet; k++) { if(points[k].X == points[j].X + newMaxDst && points[k].Y == points[j].Y) { maxDstPt3Idx = k; break; } } for(int k = 0; k < pocet; k++) { if(points[k].X == points[i].X + newMaxDst && points[k].Y == points[i].Y) { maxDstPt4Idx = k; break; } } if(maxDstPt3Idx != -1 && maxDstPt4Idx != -1) maxDst = newMaxDst; } } else if(points[i].Y == points[j].Y) { int newMaxDst = abs(points[i].X - points[j].X); if(newMaxDst > maxDst) { int maxDstPt3Idx = -1; int maxDstPt4Idx = -1; for(int k = 0; k < pocet; k++) { if(points[k].Y == points[j].Y + newMaxDst && points[k].X == points[j].X) { maxDstPt3Idx = k; break; } } for(int k = 0; k < pocet; k++) { if(points[k].Y == points[i].Y + newMaxDst && points[k].X == points[i].X) { maxDstPt4Idx = k; break; } } if(maxDstPt3Idx != -1 && maxDstPt4Idx != -1) maxDst = newMaxDst; } } } } cout << maxDst << endl; } return 0; }