#include<bits/stdc++.h>
using namespace std;
const int N=25;
bool st[N];
int lson[N];
int rson[N];
int ans=0;
bool bfs(int root){
queue<int> q;
q.push(root);
while(q.size()){
int a=q.front();
q.pop();
if(lson[a]!=-1&&rson[a]!=-1){
q.push(lson[a]);q.push(rson[a]);
ans=rson[a];
}
else if((lson[a]==-1)&&rson[a]!=-1) return false;
else{
if(lson[a]!=-1) ans=lson[a];
if(lson[a]!=-1) q.push(lson[a]);
while(q.size()){
int b=q.front();
q.pop();
if(lson[b]!=-1||rson[b]!=-1) return false;
}
}
}
return true;
}
int main(){
memset(lson,-1,sizeof lson);
memset(rson,-1,sizeof rson);
int n;scanf("%d",&n);
for(int i=0;i<n;i++){
string a,b;cin>>a>>b;
if(a[0]!='-'){
int num=0;
for(int j=0;j<a.length();j++){
num=num*10+a[j]-'0';
}
lson[i]=num;
st[num]=true;
}
if(b[0]!='-'){
int num=0;
for(int j=0;j<b.length();j++){
num=num*10+b[j]-'0';
}
rson[i]=num;
st[num]=true;
}
}
int root;
for(int i=0;i<n;i++){
if(!st[i]){
root=i;break;
}
}
if(bfs(root)){
printf("YES %d\n",ans);
}
else printf("NO %d\n",root);
return 0;
}