스택 복사 게임

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

문제

미르코가 스택을 가지고 놀고 있다. 게임을 시작할 때 미르코에게는 번호가 00인 빈 스택 하나만 있다. 게임의 ii번째 단계에서 미르코는 이미 만들어진 스택 하나를 골라 그 번호를 vv라 하고, 그 스택을 복사한 뒤 아래 세 가지 중 하나를 수행한다.

  1. 복사한 스택의 맨 위에 수 ii를 넣는다.
  2. 복사한 스택의 맨 위에 있는 수를 뺀다.
  3. 스택 하나를 더 골라 그 번호를 ww라 하고, 복사한 스택과 ww번 스택에 함께 들어 있는 서로 다른 수가 몇 개인지 센다.

새로 만든 스택의 번호는 ii가 된다.

미르코는 스택을 직접 다루기 싫어하므로, 이 과정을 대신 처리하는 프로그램을 작성하자. b 연산마다 스택에서 뺀 수를 출력하고, c 연산마다 조건을 만족하는 수의 개수를 출력한다.

입력

첫 줄에 미르코의 게임 단계 수 NN이 주어진다. (1N3000001 \le N \le 300\,000)

게임의 각 단계는 시간 순서대로 11부터 NN까지의 번호로 구분한다.

다음 NN개의 줄 중 ii번째 줄에는 ii번째 단계의 내용이 아래 세 가지 형태 중 하나로 주어진다.

  • a 연산은 "a v"
  • b 연산은 "b v"
  • c 연산은 "c v w"

줄의 첫 글자는 연산의 종류를 나타내고, 그 뒤에 오는 한 개 또는 두 개의 수는 연산에 쓰이는 스택 번호이며 항상 [0,i1][0, i-1] 구간의 정수이다.

b 연산에서 수를 빼는 스택은 비어 있지 않다.

출력

b 연산과 c 연산마다 구한 수를 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

힌트

첫 번째 예제를 살펴보자. 처음에는 스택이 S0={}S_0 = \{\} 하나뿐이다. 1번째 단계에서 S0S_0을 복사하고 맨 위에 11을 넣어 S1={1}S_1 = \{1\}이 된다. 2번째 단계에서 S1S_1을 복사하고 맨 위에 22를 넣어 S2={1,2}S_2 = \{1, 2\}가 된다. 3번째 단계에서 S2S_2를 복사하고 22를 빼서 S3={1}S_3 = \{1\}이 된다. 4번째 단계에서 S2S_2를 복사해 S4S_4라 하고, S4S_4S3S_3에 함께 들어 있는 수를 세면 11뿐이므로 답은 11이다. 5번째 단계에서 S4S_4를 복사하고 22를 빼서 S5={1}S_5 = \{1\}이 된다.