#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int znajdz(int i,vector<int>& rodzic)
{
if(rodzic[i]==i) return i;
return rodzic[i]=znajdz(rodzic[i],rodzic);
}
void polacz(int i,int j,vector<int>& rodzic)
{
int korzenI=znajdz(i,rodzic);
int korzenJ=znajdz(j,rodzic);
if(korzenI!=korzenJ)
{
rodzic[korzenI]=korzenJ;
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int liczbaKostek;
if(!(cin>>liczbaKostek)) return 0;
vector<pair<int,int>> kostki(liczbaKostek);
vector<int> unikalneWartosci;
for(int i=0; i<liczbaKostek; i++)
{
cin>>kostki[i].first>>kostki[i].second;
unikalneWartosci.push_back(kostki[i].first);
unikalneWartosci.push_back(kostki[i].second);
}
sort(unikalneWartosci.begin(),unikalneWartosci.end());
unikalneWartosci.erase(unique(unikalneWartosci.begin(),unikalneWartosci.end()),unikalneWartosci.end());
int liczbaWierzcholkow=unikalneWartosci.size();
vector<int> stopnie(liczbaWierzcholkow,0);
vector<int> rodzic(liczbaWierzcholkow);
for(int i=0; i<liczbaWierzcholkow; i++) rodzic[i]=i;
for(int i=0; i<liczbaKostek; i++)
{
int u=lower_bound(unikalneWartosci.begin(),unikalneWartosci.end(),kostki[i].first)-unikalneWartosci.begin();
int v=lower_bound(unikalneWartosci.begin(),unikalneWartosci.end(),kostki[i].second)-unikalneWartosci.begin();
stopnie[u]++;
stopnie[v]++;
polacz(u,v,rodzic);
}
int pierwszyKorzen=-1;
bool spojnosc=true;
vector<int> nieparzyste;
int aktywneWierzcholki=0;
for(int i=0; i<liczbaWierzcholkow; i++)
{
if(stopnie[i]>0)
{
aktywneWierzcholki++;
if(pierwszyKorzen==-1)
{
pierwszyKorzen=znajdz(i,rodzic);
}
else
{
if(znajdz(i,rodzic)!=pierwszyKorzen)
{
spojnosc=false;
}
}
if(stopnie[i]%2!=0)
{
nieparzyste.push_back(i);
}
}
}
if(!spojnosc)
{
cout<<"NIE\n";
return 0;
}
if(nieparzyste.size()==2)
{
int wynikPierwszy=unikalneWartosci[nieparzyste[0]];
int wynikDrugi=unikalneWartosci[nieparzyste[1]];
cout<<min(wynikPierwszy,wynikDrugi)<<" "<<max(wynikPierwszy,wynikDrugi)<<"\n";
}
else if(nieparzyste.size()==0)
{
if(aktywneWierzcholki==1)
{
int jedynyWierzcholek=-1;
for(int i=0; i<liczbaWierzcholkow; i++)
{
if(stopnie[i]>0)
{
jedynyWierzcholek=unikalneWartosci[i];
break;
}
}
cout<<jedynyWierzcholek<<" "<<jedynyWierzcholek<<"\n";
}
else
{
cout<<"NIE\n";
}
}
else
{
cout<<"NIE\n";
}
return 0;
}