아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

3비트 컴퓨터

시간 제한1초메모리 제한32 MB

요약
a, b, c로 이루어진 문자열이 주어질 때, 완전히 초기화되지 않은 메모리에서 두 연산만으로 그 문자열을 정확히 만들 수 있는지 판정한다.
난이도

보통10점 중 5점

유형
동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

바이트랜드 왕국의 과학자들이 3비트 컴퓨터(Three Bit Computer, TBC)라는 새로운 기계를 만들고 있습니다. 이 기계를 작동시키려면 먼저 메모리를 초기화하는 방법에 관한 문제를 해결해야 하며, 과학자들이 여러분에게 도움을 요청했습니다.

현재 TBC에는 11번부터 nn번까지 번호가 매겨진 nn개의 메모리 칸이 있습니다. 각 칸은 초기화되지 않은 상태이거나, 세 가지 값 aa, bb, cc 중 하나를 가집니다. 이 기계는 다음 두 가지 초기화 연산을 지원합니다.

  • 연속한 두 칸 ii번과 i+1i+1번(1≤i<n1 \le i < n)이 모두 초기화되지 않은 상태일 때, 두 칸을 서로 다른 두 값으로 설정할 수 있습니다.
  • 연속한 두 칸 중 하나는 초기화되지 않았고 다른 하나는 값 xx를 가지고 있을 때, 두 칸을 모두 xx가 아닌 두 값(즉 {a,b,c}∖{x}\{a, b, c\} \setminus \{x\}의 두 값을 어떤 순서로든)으로 설정할 수 있습니다.

예를 들어 n=4n = 4일 때, 초기화되지 않은 칸을 uu로 나타내면 다음과 같은 초기화가 가능합니다.

uuuu→uuab→ucbb→babbuuuu \rightarrow uuab \rightarrow ucbb \rightarrow babb

모든 칸이 최종적으로 가져야 할 목표 패턴이 주어질 때, 완전히 초기화되지 않은 메모리에서 시작하여 그 패턴과 정확히 일치하도록 초기화할 수 있는지 판별하는 프로그램을 작성하세요.

입력

첫째 줄에 목표 패턴의 개수 NN(1≤N≤101 \le N \le 10)이 주어집니다.

각 패턴은 두 줄로 설명됩니다.

  • 첫째 줄에는 해당 패턴의 메모리 칸 수 ℓi\ell_i(1≤ℓi≤100 0001 \le \ell_i \le 100\,000)가 주어집니다.
  • 둘째 줄에는 문자 aa, bb, cc로만 이루어진 길이 ℓi\ell_i의 문자열, 즉 목표 패턴이 주어집니다.

출력

각 패턴에 대해 입력에 주어진 순서대로 한 줄씩, 총 NN개의 줄을 출력합니다. ii번째 패턴에 대해 메모리를 그 패턴으로 초기화할 수 있으면 YES를, 그렇지 않으면 NO를 출력합니다.

예제4

  1. 예제 1

    입력
    2
    4
    aabb
    4
    aaab
    
    예상 출력
    NO
    YES
    
  2. 예제 2

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

    입력
    6
    2
    ab
    2
    ba
    2
    aa
    2
    cc
    2
    bc
    2
    ca
    
    예상 출력
    YES
    YES
    NO
    NO
    YES
    YES
    
  4. 예제 4

    입력
    8
    3
    abc
    3
    cba
    3
    aaa
    3
    bbb
    3
    aab
    3
    abb
    3
    bba
    3
    aba
    
    예상 출력
    NO
    NO
    NO
    NO
    YES
    YES
    YES
    YES