제한적 파일 시스템
면접 대비시간 제한8초메모리 제한512 MB
쓰기는 가장 앞선 빈 영역부터 채우고 중간에 다른 데이터를 만나면 그 뒤 빈 영역에서 이어 쓰는 저장 매체에서, 파일 쓰기, 삭제, 특정 섹터 참조 명령을 처리해 참조된 섹터의 파일 식별자를 출력한다.
문제
당신은 새로운 기록 매체 개발팀의 프로그래머이다. 이 기록 매체는 데이터 읽기와 삭제에 대해서는 임의 접근이 가능하다. 반면 데이터를 쓸 때는 항상 앞에서부터 순서대로 접근해 나가며 처음 발견한 빈 영역에만 쓸 수 있다.
당신은 이 기록 매체용 파일 시스템 구축을 시작했다. 이 파일 시스템에서는 기록 매체의 제약 때문에 데이터가 앞쪽 빈 영역부터 차례로 기록된다. 기록 도중 다른 데이터가 있는 영역에 이르면 나머지 데이터는 그 뒤쪽 빈 영역부터 기록한다.
데이터 쓰기는 섹터라는 단위로 이루어진다. 섹터에는 0부터 시작하는 번호가 매겨지며 이 번호는 기록 매체상의 물리적 위치를 가리킨다. 섹터 번호는 기록 매체의 앞에서 뒤로 0, 1, 2, 3, … 순서로 매겨진다.
파일 시스템에는 쓰기, 삭제, 섹터 참조라는 세 가지 명령이 있다.
당신의 일은 이 파일 시스템의 동작을 재현하고, 참조 명령이 실행될 때 대상 섹터에 어떤 파일이 놓여 있는지 출력하는 프로그램을 작성하는 것이다. 처음에는 기록 매체에 아무것도 기록되어 있지 않다.
예를 들어 Sample Input의 첫 번째 예를 보자. 첫 명령에서는 식별자가 0이고 크기가 2인 파일을 쓴다. 처음에는 기록 매체에 아무것도 기록되어 있지 않다. 즉 모든 섹터가 빈 영역이므로 맨 앞의 두 섹터, 0번 섹터와 1번 섹터에 쓰기가 이루어진다. 따라서 쓰기 후 기록 매체는 다음과 같다.
0 0 空 空 空 空 空 空 …
두 번째 명령으로 식별자가 1인 파일이 2번과 3번 섹터에 쓰인다. 그 후 기록 매체의 상태는 다음과 같다.
0 0 1 1 空 空 空 空 …
세 번째 명령으로 식별자가 0인 파일이 삭제된다. 기록 매체의 상태는 다음과 같다.
空 空 1 1 空 空 空 空 …
네 번째 명령으로 식별자가 2인 파일이 0번, 1번, 4번, 5번 섹터에 쓰인다.
2 2 1 1 2 2 空 空 …
마지막 명령에서는 3번 섹터를 참조한다. 지금 3번 섹터에는 식별자가 1인 파일이 놓여 있으므로 프로그램은 1을 출력해야 한다.
입력
입력은 여러 데이터 세트로 이루어진다. 각 데이터 세트는 다음 형식으로 주어진다.
N
Command1
Command2
...
CommandN
N은 실행되는 명령의 수(1 ≤ N ≤ 10,000), Command**i는 i번째로 실행되는 명령을 나타낸다.
각 명령은 명령 이름과 하나 또는 두 개의 인자로 이루어진다. 명령 이름은 문자 하나로, W, D, R 중 하나이다. 명령과 인자 사이, 인자와 인자 사이는 각각 공백 하나로 구분된다.
W는 쓰기 명령이다. 두 인자 I (0 ≤ I ≤ 10^9)와 S (1 ≤ S ≤ 10^9)가 주어진다. 각각 쓸 파일의 식별자와 그 파일을 저장하는 데 필요한 섹터 수를 나타낸다.
D는 삭제 명령이다. 인자 I (0 ≤ I ≤ 10^9)가 주어진다. 삭제할 파일의 식별자를 나타낸다.
R은 참조 명령이다. 인자 P (0 ≤ P ≤ 10^9)가 주어진다. 참조할 섹터 번호를 나타낸다.
10^9보다 큰 번호를 가진 섹터에는 접근할 필요가 없다고 가정한다. 또한 같은 파일 식별자를 가진 파일을 여러 번 쓰는 일은 없다고 보장된다.
입력의 끝은 0 하나를 포함하는 한 줄로 나타낸다.
출력
각 데이터 세트마다 참조 명령이 나타날 때마다 그 명령으로 참조된 파일의 식별자를 한 줄에 출력한다. 참조한 섹터에 파일이 기록되어 있지 않으면 파일 식별자 대신 -1을 출력한다.
각 데이터 세트 뒤에는 빈 줄을 넣는다.