import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.util.stream.Collectors;

public class Main {

    public static class Point{
        private int x;
        private int y;

        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }

        public int getX() {
            return x;
        }

        public void setX(int x) {
            this.x = x;
        }

        public int getY() {
            return y;
        }

        public void setY(int y) {
            this.y = y;
        }

        @Override
        public String toString() {
            return "Point{" +
                    "x=" + x +
                    ", y=" + y +
                    '}';
        }
    }

    public static void main(String[] args) throws IOException {

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));


        while (true)
        {
            String tmp = in.readLine();
            if(tmp == null) break;

            int num = Integer.parseInt(tmp);

            ArrayList<Point> points = new ArrayList<>();

            for (int i = 0; i < num; i++){
                StringTokenizer stringTokenizer = new StringTokenizer(in.readLine());
                points.add(new Point(Integer.parseInt(stringTokenizer.nextToken()), Integer.parseInt(stringTokenizer.nextToken())));
            }

            if(num<4){
                System.out.println("0");
                continue;
            }

            int previousX=-1;
            int limit = 0;
            int finalDist = 0;

            for(int i = 0; i < num; i++){
                Point point = points.get(i);


                if(previousX != point.getX()) {
                    limit = 0;
                    for (int k = i+1; k < num; k++) {
                        if(k+1==num){
                            limit += i+1;
                            previousX = point.getX();
                            break;
                        }else if (points.get(k).getX() == point.getX()) {
                            limit++;
                        } else {
                            limit += i;
                            previousX = point.getX();
                            break;
                        }
                    }
                }


                boolean hasX = false;
                boolean hasY = false;
                for(int k = limit; k>i; k--){
                    int dist=points.get(k).getY()-point.getY();
                    if(k+1 != num) {
                        for (int j = k + 1; j < num; j++) {
                            if ((points.get(j).getX() - point.getX() == dist) && (points.get(j).getY() == point.getY())) {
                                hasX = true;
                            } else if ((points.get(j).getX() - points.get(k).getX() == dist) && (points.get(j).getY() == points.get(k).getY())) {
                                hasY = true;
                            }
                        }
                    }
                    if(hasX && hasY){
                        if(finalDist<dist){
                            finalDist=dist;
                            break;
                        }
                    }
                }


            }

            System.out.println(finalDist);



        }

    }
}


















