문자열에 문자가 덧붙고 현재 문자열이 집합에 추가되는 과정에서, 저장된 문자열 중 현재 문자열의 접미사인 것의 개수를 묻는 질의에 답한다.

보통7문자열트라이아직 제출이 없습니다시간 제한0.5초메모리 제한256 MB

문제

K는 컴퓨터로 놀다가 이상한 게임을 하나 발견했다. 게임은 길이가 NN인 문자열 SS와 비어 있는 집합 TT로 시작한다 (1N10001 \le N \le 1000). 게임이 진행되는 동안 다음 세 가지 사건이 일어난다.

  • SS의 끝에 문자 하나가 붙어서 SS의 길이가 1 늘어난다.
  • 지금의 SS를 집합 TT에 넣는다.
  • 게임 진행자가 묻는다. "TT에 들어 있는 문자열 가운데 SS의 접미사인 것은 몇 개인가?" SS의 접미사는 SS의 어느 위치에서 시작해도 되지만 반드시 SS의 마지막 위치에서 끝나는 부분문자열이다.

K는 고향 근처에 있는 유명한 성을 보러 가고 싶어 한다. K가 게임을 최대한 빨리 끝내도록 도와라.

입력

첫째 줄에 정수 두 개 NNEE가 주어진다. NN은 처음 문자열 SS의 길이이고, EE는 사건의 개수이다 (E1200000E \le 1\,200\,000).

둘째 줄에 문자열 SS가 주어진다. SS는 알파벳 소문자 a-z로만 이루어져 있다.

이어지는 EE개의 줄에 사건이 한 줄에 하나씩 주어진다. 각 줄은 사건의 종류를 나타내는 정수 pp로 시작한다.

  • pp가 1이면 뒤에 문자 하나(a-z)가 이어진다. 이 문자를 SS의 끝에 붙인다.
  • pp가 2이면 지금의 SSTT에 넣는다.
  • pp가 3이면 "TT에 들어 있는 문자열 가운데 지금의 SS의 접미사인 것은 몇 개인가?"라는 질문에 답해야 한다.

출력

입력에 있는 종류 3의 사건마다 그 답을 정수로 한 줄에 하나씩 출력한다.

TT는 집합이므로 같은 문자열을 여러 번 넣어도 하나만 들어 있다.

입력이 매우 크므로 빠른 입출력이 필요하다. C에서는 scanfprintf를, C++에서는 읽기 전에 cin.tie(NULL); ios::sync_with_stdio(false);를, 자바에서는 BufferedReaderBufferedWriter를 쓰면 된다.