#include using namespace std; struct node { node(){} node(long long xi, long long yi):x(xi) { y.insert(yi); } long long x; mutable set y; long long operator < (node a) const{ return x < a.x; } }; int main () { ios::sync_with_stdio(false); map graph; long long n; while ( cin >> n ) { long long m = 0; for ( long long j = 0; j < n; ++j ) { long long x, y; cin >> x >> y; auto i = graph.find(x) ; if ( i == graph.end() ) { graph [x] = node(x, y); } else { i -> second . y.insert(y); } } for ( auto i : graph ) { if ( i . second . y.size() == 1 ) continue; for ( set::iterator j = i.second.y.begin(); j != i.second.y.end(); ++j ) { for ( set::iterator k = j; k != i . second. y.end(); ++k ) { long long dif = *k - *j; node tmp(i . second . x + dif, 0); auto right = graph.find(i . second . x + dif); if ( right -> second. x <= i.second.x ) continue; if ( right -> second. y.find(*k) != right -> second.y.end() && right -> second.y.find(*j) != right -> second.y.end() ) { m = max ( m , dif ); } } } } cout << m << endl; } return 0; }