/** * author: Øyvind Grotmol */ import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; public class setstack_og { Stack> stack = new Stack>(); Map,Integer> idmap = new HashMap,Integer>(); void execute(String cmd) { if (cmd.equals("DUP")) { stack.push(stack.peek()); } else if (cmd.equals("PUSH")) { stack.push(new HashSet()); } else { Set A = stack.pop(); Set B = stack.pop(); stack.push(calculate(cmd, A, B)); } } Set calculate(String cmd, Set A, Set B) { Set set = new HashSet(); if (cmd.equals("ADD")) { set.add(getId(A)); set.addAll(B); } else if (cmd.equals("UNION")) { set.addAll(A); set.addAll(B); } else { assert cmd.equals("INTERSECT"); set.addAll(A); set.retainAll(B); } return set; } Integer getId(Set set) { Integer stored = idmap.get(set); if (stored == null) { stored = idmap.size(); idmap.put(set,stored); } return stored; } public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(in.readLine()); for (int t=0; t