import java.util.*;
class point{
int op=-1,num,key;
String name;
int time = 0;
int mark = 0;
point sdom, label, ancestor, parent, dom;
ArrayList<point> in=new ArrayList<point>();
ArrayList<point> out=new ArrayList<point>();
ArrayList<point> bucket=new ArrayList<point>();
point() {
this.sdom = this.label = this;
this.ancestor = this.dom = this.parent = null;
this.in = new ArrayList<point>();
this.out = new ArrayList<point>();
this.bucket = new ArrayList<point>();
}
point(String name, int op, int num, int key){
this.name = name;
this.op = op;
this.num = num;
this.key = key;
}
point(String name, int num, int key){
this.name = name;
this.num = num;
this.key = key;
}
}
public class Factorial {
public static void main(String[] args){
HashMap<Integer, point> Map = new HashMap<Integer, point>();
Scanner sc = new Scanner(System.in);
int i,j,n,ans,k=0,p=0,t=1;
char[]bufff = new char[20];
String buff=new String();
String buff1=new String();
String buff2=new String();
buff1="";
int buf;
buff=sc.nextLine();
n=Integer.valueOf(buff);
point [] graph=new point[n];
point [] forms=new point[n];
for(i=0;i<n;i++){
graph[i]=new point();
forms[i]=new point();
}
point bu=new point();
for(i=0;i<n;i++){
buff=sc.nextLine();
p=0;
bu.op=-1;
for(j=0;j<buff.length();j++){
if(buff.charAt(j)!=' '){
while(j<buff.length() && buff.charAt(j)!=' ')
bufff[k++]=buff.charAt(j++);
}
if(p==0){
for(int z=0;z<k;z++)
buff1+=bufff[z];
bu.key=Integer.valueOf(buff1);
buff1="";
p=1;
k=0;
}
else if(p==1){
for(int z=0;z<k;z++)
buff1+=bufff[z];
bu.name=buff1;
buff1="";
p=2;
k=0;
}
else if(p==2){
for(int z=0;z<k;z++)
buff1+=bufff[z];
bu.op=Integer.valueOf(buff1);
buff1="";
k=0;
}
}
if(bu.name.charAt(0)=='B' ||bu.name.charAt(0)=='J') {
Map.put(bu.key, new point(bu.name, bu.op, i, bu.key));
forms[i].name=bu.name;
forms[i].num=i;
forms[i].key=bu.key;
forms[i].op=bu.op;
}
else {
Map.put(bu.key, new point(bu.name, i, bu.key));
forms[i].name=bu.name;
forms[i].num=i;
forms[i].key=bu.key;
}
if(i+1<n && bu.name.charAt(0)!='J'){
graph[i].out.add(graph[i+1]);
graph[i+1].in.add(graph[i]);
}
graph[i].name=forms[i].name+' '+Integer.toString(forms[i].key);
}
for(i=0;i<n;i++){
if(forms[i].name.charAt(0)!='A'){
graph[forms[i].num].out.add(graph[Map.get(Map.get(forms[i].key).op).num]);
graph[Map.get(Map.get(forms[i].key).op).num].in.add(graph[forms[i].num]);
}
}
dfs(graph[0],t);
List<point> G=new ArrayList<point>();
for(i=0;i<n;i++){
for(j=0;j<graph[i].in.size();j++){
if(graph[i].in.get(j).mark==0){
graph[i].in.remove(j);
}
}
}
for(i=0;i<n;i++){
if(graph[i].mark==1){
G.add(graph[i]);
}
}
Collections.sort(G, (p1, p2) -> {
return p1.time - p2.time;
});
}
public static void dfs(point p,int time) {
time+=1;
p.mark=1;
p.time=time;
int i;
for(i = 0; i < p.out.size(); i++){
if(p.out.get(i).mark != 1){
p.out.get(i).parent=p;
dfs(p.out.get(i),time);
}
}
}
}