//思路:将数据分别放进两个优先队列中
//一个存升序,存进入的;一个降序,存离开的
#include <iostream>
#include <cstdio>
#include <queue>
#include <string>
using namespace std;
struct Enter{
string id;
string entertime;
Enter(string a,string b):id(a),entertime(b){}
bool operator> (Enter e) const{ //重载运算符
return entertime>e.entertime;
}
};
struct Leave{
string id;
string leavetime;
Leave(string a,string b):id(a),leavetime(b){}
bool operator< (Leave e) const{ //重载运算符
return leavetime<e.leavetime;
}
};
int main(){
int n;
while(scanf("%d",&n)!=EOF){
priority_queue<Enter,vector<Enter>,greater<Enter>>enter;//改为二叉小根堆
priority_queue<Leave>leave;
string number;
string time1;
string time2;
for(int i=0;i<n;i++){
cin>>number>>time1>>time2;
enter.push({number,time1});
leave.push({number,time2});
}
cout<<enter.top().id<<" "<<leave.top().id<<endl;
}
return 0;
}