에디터

아직 제출이 없습니다시간 제한3초메모리 제한512 MB

문제

바이트아사르는 텍스트 편집기를 만들고 있다. 편집기의 연산은 두 종류다. 하나는 텍스트를 고치는 편집 연산이고, 다른 하나는 앞서 수행한 연산을 취소하는 되돌리기 연산이다. 이 편집기의 되돌리기는 여러 단계로 동작한다.

편집 연산은 레벨 0인 연산이다. 레벨 ii(i=1,2,i = 1, 2, \dots)의 되돌리기 연산은 아직 취소되지 않은 연산 중에서 레벨이 i1i - 1 이하인 가장 최근 연산을 취소한다. 그래서 레벨 1의 되돌리기는 편집 연산만 취소하고, 레벨 2의 되돌리기는 편집 연산과 레벨 1의 되돌리기 연산을 취소하지만 그보다 높은 레벨의 되돌리기 연산은 취소하지 못한다.

좀 더 엄밀하게 쓰면, 이미 수행한 각 연산은 활성 상태이거나 취소 상태다. 연산 XX를 수행한 직후 XX는 활성 상태다. XX가 레벨 ii의 되돌리기 연산이면 레벨이 i1i - 1 이하인 활성 연산 중 가장 최근 것을 X1X_1이라 하고, X1X_1을 취소 상태로 바꾼다. X1X_1도 되돌리기 연산이라면 X1X_1이 취소했던 연산 X2X_2의 상태를 다시 활성으로 바꾼다. 이 규칙은 계속 이어진다. 되돌리기 연산 XjX_j의 상태가 바뀌면 XjX_j가 취소했던 연산 Xj+1X_{j+1}의 상태도 함께 바뀐다. 편집 연산에 이르면 상태 변경의 연쇄가 끝난다.

편집기의 현재 내용은 정수 ss 하나로 나타내고, 이 값을 편집기 상태라고 한다. 처음 편집기 상태는 0이다. 편집 연산은 자신이 만들어 낼 편집기 상태를 지정한다. 현재 편집기 상태는 활성 상태인 가장 최근 편집 연산의 값이고, 활성 편집 연산이 하나도 없으면 0이다.

아래 표는 연산을 차례로 수행했을 때의 편집기 상태를 보여 준다. Es는 편집기 상태를 ss로 바꾸는 편집 연산이고, Ui는 레벨 ii의 되돌리기 연산이다.

연산E1E2E5U1U1U3E4U2U1U1E1
편집기 상태012521242101

바이트아사르는 먼저 편집 연산을 세 번 수행해 상태를 0에서 1, 2, 5로 바꿨다. 이어진 레벨 1의 되돌리기 두 번이 E5E2를 취소해 상태가 1로 돌아갔다. 그다음 레벨 3의 되돌리기가 마지막 U1을 취소했고, 그 결과 E2가 다시 활성이 되어 상태가 2가 됐다. U2E4를 취소했고, 다음 U1은 되살아난 E2를 다시 취소했으며, 마지막 U1E1을 취소했다. 마지막 연산은 상태를 1로 바꾸는 편집 연산이다.

각 연산을 수행한 뒤의 편집기 상태를 모두 구하는 프로그램을 작성하라.

입력

첫 줄에 바이트아사르가 수행한 연산의 개수 nn(1n5000001 \le n \le 500000)이 주어진다.

다음 nn개 줄에 연산을 나타내는 정수 aia_i(nain-n \le a_i \le n, ai0a_i \ne 0)가 한 줄에 하나씩 주어진다. ai>0a_i > 0이면 편집기 상태를 aia_i로 바꾸는 편집 연산이고, ai<0a_i < 0이면 레벨 ai-a_i의 되돌리기 연산이다. 모든 되돌리기 연산에는 취소할 대상, 곧 레벨이 더 작은 활성 연산이 항상 존재한다.

출력

nn개 줄을 출력한다. ii번째 줄에는 입력의 처음 ii개 연산을 수행한 뒤의 편집기 상태를 출력한다.