문제
양의 정수 값을 원소로 갖고 오름차순으로 관리되는 수열이 있다.
수열의 초기 상태는 비어있으며, 쿼리를 통해 수열에 값이 추가되고 삭제되고 변경된다.
쿼리마다 아래 5가지 명령 중 한개의 명령 정보가 주어지면 명령에 맞는 작업을 수행해야 한다.
명령1 : "insert x"
수열에 값이 x인 원소를 추가한다.
만약, x인 원소가 이미 수열에 존재하면 추가하지 않는다.
명령2 : "erase x"
수열에 x인 원소가 있으면 수열에서 삭제한다.
명령3 : "update x y"
수열에 x인 원소가 있으면 y로 변경한다.
만약, y인 원소가 이미 있으면 아무것도 수행하지 않는다.
변경 후에도 오름차순으로 수열이 유지되어야 한다.
명령4 : "front c"
수열의 맨 앞에서부터 c번째 값을 출력한다.
만약, 수열의 원소가 c개보다 작으면 마지막 원소 값을 출력하고, 수열이 비어있으면 'empty'를 출력한다.
명령5 : "back c"
수열의 맨 뒤에서부터 c번째 값을 출력한다.
만약, 수열의 원소가 c개보다 작으면 첫번째 원소 값을 출력하고, 수열이 비어있으면 'empty'를 출력한다.
입력
첫 줄에 테스트 케이스 T(1~5)가 입력된다.
각 테스트 케이스의 첫 번째 줄에 쿼리수 Q(1~100)가 입력된다.
각 테스트 케이스의 두 번째 줄부터 Q개 줄에 걸쳐 명령이 한줄씩 입력된다.
쿼리 별로 명령 정보와 명령에 필요한 int 범위의 양의 정수 값(들)이 입력된다.
명령 정보는 'insert' , 'erase' , 'update' , 'front' , 'back' 5가지 문자열 중 하나로 주어진다.
출력
'front', 'back' 명령을 수행한 결과를 한 줄에 한 개씩 출력한다.
예제
1
16
insert 5
insert 10
insert 20
front 1
front 5
back 3
back 5
erase 10
update 5 30
front 1
back 2
erase 30
erase 20
erase 1
front 3
back 3
5
20
5
5
20
20
empty
empty