만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

문자열 확인

시간 제한2초메모리 제한1024 MB

요약
a와 b로 이루어진 문자열 s와 copy, swap, roll, fuse 명령 목록이 주어질 때, 명령 실행 중 CRASH가 발생하는지 확인하고 발생하지 않으면 최종 맨 위 문자열이 s와 같은지 판별합니다.
난이도

보통10점 중 6점

유형
문자열, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

가상 기계는 문제 B에 나오는 것과 같다고 하자.

문자열 ss와 이 기계에서 실행할 명령 nn개로 이루어진 프로그램이 주어진다. 각 명령은 copy, swap, roll, fuse 중 하나이다. 처음 기계의 스택에는 두 문자열이 "a b" 형태로 들어 있다. 명령 목록을 순서대로 모두 실행한다.

모든 명령이 올바르게 실행되었는지, 아니면 어떤 명령을 실행하다 CRASH 사건이 발생했는지 판단한다. 모든 명령이 올바르게 실행되었다면, 명령을 모두 실행한 뒤 스택 끝에 남은 문자열이 ss와 같은지도 판단한다.

입력

첫 줄에 문자열 ss가 주어진다. ss는 소문자 라틴 문자 a와 b로만 이루어지며, 길이는 1 이상 10510^5 이하이다.

둘째 줄에 정수 nn (0≤n≤1050 \le n \le 10^5)이 주어진다. 다음 nn개 줄에 실행 순서대로 명령이 한 줄에 하나씩 주어진다. 각 명령은 copy, swap, roll, fuse 중 하나이다.

출력

다음 중 정확히 하나만 출력한다.

  • CRASH: 프로그램을 실행하는 중 CRASH 사건이 발생한 경우
  • YES: 모든 명령을 실행한 뒤 스택 끝의 문자열이 ss와 같은 경우
  • NO: 모든 명령을 실행한 뒤 스택 끝의 문자열이 ss와 다른 경우

예제3

  1. 예제 1

    입력
    ababa
    9
    swap
    copy
    roll
    fuse
    copy
    fuse
    copy
    roll
    fuse
    
    예상 출력
    YES
    
  2. 예제 2

    입력
    a
    0
    
    예상 출력
    NO
    
  3. 예제 3

    입력
    aaba
    1
    roll
    
    예상 출력
    CRASH