//思路:将数据分别放进两个优先队列中
//一个存升序,存进入的;一个降序,存离开的
#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;
}