import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        solution(reader);
    }

    /**
     * 模拟法
     *
     * List<Point> pointList = new ArrayList<>()
     *
     * BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))
     * Scanner in = new Scanner(System.in) -> 比BufferedReader多花大约700ms时间
     *
     * @param reader
     */
    private static void solution(BufferedReader reader) throws IOException{
        int N = Integer.parseInt(reader.readLine());

        List<Point> pointList = new ArrayList<>();

        Point xMaxPoint = new Point(0, 0);
        Point yMaxPoint = new Point(0, 0);
        StringBuilder sb = new StringBuilder();
        int x,y;
        String[] line;
        for(int i=1; i<=N; i++){
            line = reader.readLine().split(" ");
            x = Integer.parseInt(line[0]);
            y = Integer.parseInt(line[1]);
            if(x>xMaxPoint.x || (x==xMaxPoint.x && y<xMaxPoint.y)){
                xMaxPoint.setX(x);
                xMaxPoint.setY(y);
            }
            if(y>yMaxPoint.y || (y==yMaxPoint.y && x<yMaxPoint.x)){
                yMaxPoint.setX(x);
                yMaxPoint.setY(y);
            }
            pointList.add(new Point(x, y));
        }

        if(xMaxPoint.equals(yMaxPoint)){
            sb.append(xMaxPoint.toString());
        }else{
            int tmpMaxY = xMaxPoint.y;
            sb.append(xMaxPoint.toString());

            pointList.sort((o1, o2) -> {
                if(o1.x != o2.x){
                    return o2.x - o1.x;
                }else{
                    return o1.y - o2.y;
                }
            });

            Point point;
            int size = pointList.size();
            for(int i=1; i<size; i++){
                point = pointList.get(i);
                if(point.y >= tmpMaxY){
                    tmpMaxY = point.y;
                    sb.insert(0, point.toString()+"\n");
                    if(point.equals(yMaxPoint)){
                        break;
                    }
                }
            }
        }

        System.out.println(sb);
    }

    private static class Point{
        int x;
        int 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 boolean equals(Object o){
            if(this == o){
                return true;
            }
            if(o == null || getClass() != o.getClass()){
                return false;
            }
            Point point = (Point) o;
            return x == point.x && y == point.y;
        }

        @Override
        public String toString(){
            return x+" "+y;
        }

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