import java.io.*; import java.util.*; class D { private static final Scanner cin = new Scanner(System.in); public static void main(String[] args) { while(true) { int n = cin.nextInt(); if(n == 0) { break; } Storage storage = new Storage(); for(int i = 0; i < n; i++) { String cmd = cin.next("[WDR]"); switch(cmd.charAt(0)) { case 'W': storage.create(cin.nextInt(), cin.nextInt()); break; case 'D': storage.delete(cin.nextInt()); break; case 'R': System.out.println(storage.refer(cin.nextInt())); break; } // storage.dump(); } System.out.println(); } } private static class Storage { private List data; public static final int FREE = -1; public Storage() { data = new LinkedList(); data.add(new Fragment(0, Integer.MAX_VALUE, FREE)); } public void dump() { System.err.println("--------"); for(Fragment f : data) { System.err.println(f.addr + " " + f.size + " " + f.file); } } public void create(int file, int size) { verify(file, 0, "file"); verify(size, 1, "size"); ListIterator i = data.listIterator(); while(size > 0) { Fragment f = i.next(); if(f.file != FREE) { continue; } if(f.size <= size) { f.file = file; size -= f.size; } else { i.previous(); i.add(new Fragment(f.addr, size, file)); f.addr += size; f.size -= size; break; } } } public void delete(int file) { verify(file, 0, "file"); Iterator i = data.iterator(); while(i.hasNext()) { Fragment f = i.next(); if(f.file == file) { f.file = FREE; } } } public int refer(int addr) { verify(addr, 0, "addr"); Iterator i = data.iterator(); while(true) { Fragment f = i.next(); if(f.addr + f.size > addr) { return f.file; } } } private static void verify(int value, int limit, String name) { if(value < limit) { throw new IllegalArgumentException("Illegal " + name + ": " + value); } } } private static class Fragment { public int addr; public int size; public int file; public Fragment(int addr, int size, int file) { this.addr = addr; this.size = size; this.file = file; } } }