#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
struct number{
int x,y;
}stu[50020];
int cmp(number x1,number x2){
return x1.x<x2.x||x1.x==x2.x&&x1.y<x2.y;
}
int main() {
int i,n,count=0;
i=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d %d",&stu[i].x,&stu[i].y);
}
sort(stu,stu+n,cmp);
int w=stu[0].y;//因为是区间判断能否合并所以只需要将左侧排序 不需要求出最少区间
for(i=1;i<n;i++){
if(stu[i].x>w){//第一组右区间与第二组数左区间表示两个区间没有交集
printf("no");
return 0;
}
if(stu[i].y>w)//已经排除没有交集的情况,将区间的右侧存入w,以便后面遍历使用
w=stu[i].y;}
printf("%d %d",stu[0].x,w);
return 0;
}