import java.util.*;
class Vertex implements Comparable<Vertex>{
String name = "";
private int time = 0, mark = 0;
private Vertex sdom, label, ancestor, parent, dom;
private ArrayList<Vertex> value, value1, bucket;
Vertex(){
this.sdom = this.label = this;
this.ancestor = this.dom = this.parent = null;
this.value = new ArrayList<Vertex>();
this.value1 = new ArrayList<Vertex>();
this.bucket = new ArrayList<Vertex>();
}
public ArrayList<Vertex> getValue() {
return value;
}
public ArrayList<Vertex> getValue1() {
return value1;
}
public void setMark(int mark) {
this.mark = mark;
}
public void setTime(int time) {
this.time = time;
}
public int getMark() {
return mark;
}
public void setParent(Vertex parent) {
this.parent = parent;
}
@Override
public int compareTo(Vertex o) {
return this.time - o.time;
}
public ArrayList<Vertex> getBucket() {
return bucket;
}
public Vertex getDom() {
return dom;
}
public Vertex getSdom() {
return sdom;
}
public int getTime() {
return time;
}
public Vertex getAncestor() {
return ancestor;
}
public Vertex getLabel() {
return label;
}
public Vertex getParent() {
return parent;
}
public void setAncestor(Vertex ancestor) {
this.ancestor = ancestor;
}
public void setDom(Vertex dom) {
this.dom = dom;
}
public void setLabel(Vertex label) {
this.label = label;
}
public void setSdom(Vertex sdom) {
this.sdom = sdom;
}
}
class Elem{
String command;
int operand = -1, number, key;
Elem(String command, int operand, int number, int key){
this.command = command;
this.operand = operand;
this.number = number;
this.key = key;
}
Elem(String command, int number, int key){
this.command = command;
this.number = number;
this.key = key;
}
}
public class Loops {
private static HashMap<Integer, Elem> help = new HashMap<Integer, Elem>();
private static ArrayList<Elem> all_commands = new ArrayList<Elem>();
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int i, j, n = Integer.valueOf(in.nextLine()), answer;
ArrayList<Vertex> graph = new ArrayList<Vertex>();
for(i = 0; i < n; i++){
graph.add(i, new Vertex());
}
for(i = 0; i < n; i++){
String temp = in.nextLine();
parseString(temp, i, graph);
}
for(i = 0; i < all_commands.size(); i++){
if(all_commands.get(i).operand != -1){
graph.get(all_commands.get(i).number).getValue().add(graph.get(help.get(help.get(all_commands.get(i).key).operand).number));
graph.get(help.get(help.get(all_commands.get(i).key).operand).number).getValue1().add(graph.get(all_commands.get(i).number));
}
}
//System.out.println(graph.size());
dfs(graph.get(0));
Iterator<Vertex> iter = graph.iterator();
while (iter.hasNext()) {
Vertex vertex = iter.next();
if(vertex.getMark() == 0) iter.remove();
}
for(i = 0; i < graph.size(); i++){
iter = graph.get(i).getValue1().iterator();
while (iter.hasNext()) {
Vertex vertex = iter.next();
if (vertex.getMark() == 0) iter.remove();
}
}
Collections.sort(graph);
//System.out.println(graph.size());
dominators(graph);
for(i = answer = 0; i < graph.size(); i++){
for(j = 0; j < graph.get(i).getValue1().size(); j++){
Vertex w = graph.get(i).getValue1().get(j);
while(w != null && w != graph.get(i)){
w = w.getDom();
}
if(w == graph.get(i)) {
answer++;
break;
}
}
}
System.out.println(answer);
}
public static void parseString(String s, int number, ArrayList<Vertex> graph){
int i, flag = 1;
String key = "", operand = "", name = "";
for(i = 0; i < s.length(); i++){
if(s.charAt(i) != ' '){
if(s.charAt(i) == 'A'){
name = "ACTION";
i += 5;
if(number+1 < graph.size()){
graph.get(number).getValue().add(graph.get(number+1));
graph.get(number+1).getValue1().add(graph.get(number));
}
graph.get(number).name = name+' '+key;
}
else if(s.charAt(i) == 'B'){
name = "BRANCH";
flag = 0;
i += 4;
if(number+1 < graph.size()){
graph.get(number).getValue().add(graph.get(number+1));
graph.get(number+1).getValue1().add(graph.get(number));
}
graph.get(number).name = name+' '+key;
}
else if(s.charAt(i) == 'J'){
name = "JUMP";
flag = 0;
i += 3;
graph.get(number).name = name+' '+key;
}
else if(i < s.length() && (int) s.charAt(i) > 47 && (int) s.charAt(i) < 58){
String temp = "";
while(i < s.length() && (int) s.charAt(i) > 47 && (int) s.charAt(i) < 58){
temp += s.charAt(i++);
}
i--;
if(flag == 1){
key = temp;
}
else operand = temp;
}
}
}
if(flag == 1){
help.put(Integer.valueOf(key), new Elem(name, number, Integer.valueOf(key)));
all_commands.add(new Elem(name, number, Integer.valueOf(key)));
}
else{
help.put(Integer.valueOf(key), new Elem(name, Integer.valueOf(operand), number, Integer.valueOf(key)));
all_commands.add(new Elem(name, Integer.valueOf(operand), number, Integer.valueOf(key)));
}
}
private static int time = 1;
public static void dfs(Vertex vertex) {
vertex.setMark(1);
vertex.setTime(time++);
int i;
for(i = 0; i < vertex.getValue().size(); i++){
if(vertex.getValue().get(i).getMark() != 1){
vertex.getValue().get(i).setParent(vertex);
dfs(vertex.getValue().get(i));
}
}
}
public static void dominators(ArrayList<Vertex> graph){
int i, j, k;
for(i = graph.size()-1; i > 0; i--){
Vertex w = graph.get(i);
for(j = 0; j < w.getValue1().size(); j++){
Vertex u = FindMin(graph, w.getValue1().get(j));
if(u.getSdom().getTime() < w.getSdom().getTime()) w.setSdom(u.getSdom());
}
w.setAncestor(w.getParent());
w.getSdom().getBucket().add(w);
for(k = 0; k < w.getParent().getBucket().size(); k++){
Vertex u = FindMin(graph, w.getParent().getBucket().get(k));
if((u.getSdom() == w.getParent().getBucket().get(k).getSdom())){
w.getParent().getBucket().get(k).setDom(w.getParent());
}
else w.getParent().getBucket().get(k).setDom(u);
}
w.getParent().getBucket().clear();
}
for(i = 1; i < graph.size(); i++){
Vertex w = graph.get(i);
if(w.getDom() != w.getSdom()) w.setDom(w.getDom().getDom());
}
graph.get(0).setDom(null);
}
public static Vertex FindMin(ArrayList<Vertex> graph, Vertex v){
if(v.getAncestor() == null) return v;
else{
Stack<Vertex> stack = new Stack<Vertex>();
Vertex u = v;
while (u.getAncestor().getAncestor() != null){
stack.push(u);
u = u.getAncestor();
}
while(stack.size() != 0){
v = stack.pop();
if(v.getAncestor().getLabel().getSdom().getTime() < v.getLabel().getSdom().getTime()) v.setLabel(v.getAncestor().getLabel());
v.setAncestor(u.getAncestor());
}
return v.getLabel();
}
}
}