회문 DNA

시간 제한3초메모리 제한128 MB

요약
순환 알파벳과 여러 부분집합 팰린드롬 제약, 인접 위치 동시 변경 금지 조건 아래 각 위치를 0 또는 ±1만큼 바꿔 조건을 만족시킬 수 있는지 판별합니다.
난이도

어려움10점 중 8점

유형
유니온 파인드, 그래프, 구현, 수학
정답자
아직 제출이 없습니다

문제

DNA 서열은 네 가지 염기 — 아데닌(Adenine), 구아닌(Guanine), 티민(Thymine), 사이토신(Cytosine) — 으로 이루어진 문자열이며, 각각을 첫 글자 A, G, T, C로 나타낸다. 염기에는 순환 순서가 있다. A 다음은 G, G 다음은 T, T 다음은 C, C 다음은 다시 A이다.

최근 유전체 연구에 따르면 어떤 염기 묶음이 회문(앞뒤로 읽어도 같은 문자열)을 이루지 못하면 특정 질병과 연관될 수 있다고 한다. 00번부터 번호를 매긴 DNA 문자열 SS와 위치들의 부분집합 P1,…,PtP_1, \dots, P_t가 주어진다. 각 부분집합에 대해, 그 위치들에 있는 SS의 문자들이 앞뒤로 읽어도 같도록 SS를 변형해야 한다. 엄밀히 말하면, 부분집합 P={i1,i2,…,ik}P = \{i_1, i_2, \dots, i_k\} (0≤i1<i2<⋯<ik<∣S∣0 \le i_1 < i_2 < \dots < i_k < |S|)에 대한 SS의 제한은 문자열 Si1Si2⋯SikS_{i_1} S_{i_2} \cdots S_{i_k}이며, 모든 제한이 회문이어야 한다.

어떤 염기든 확인할 수 있지만, 각 염기는 다음 세 가지 방법으로만 바꿀 수 있다.

  1. 그대로 둔다.
  2. 순환 순서에서 한 칸 앞으로 보낸다 (예: C는 A가 된다).
  3. 한 칸 뒤로 보낸다 (예: T는 G가 된다).

또한 기술적 한계 때문에, 서열에서 연속한 두 위치의 염기를 동시에 바꿀 수는 없다. 목표를 달성할 수 있는지 판단하라.

예를 들어 서열 AGTAT에 부분집합 P1={1,4}P_1 = \{1, 4\}, P2={0,1}P_2 = \{0, 1\}, P3={0,2,4}P_3 = \{0, 2, 4\}가 주어졌다고 하자. 첫 염기를 한 칸 앞으로, 마지막 염기를 한 칸 뒤로 보내면 GGTAG가 되고, 세 제한은 각각 GG, GG, GTG로 모두 회문이며, 바뀐 두 위치(00번과 44번)는 서로 이웃하지 않는다.

반대로 서열 CATGC에 두 부분집합 {0,3}\{0, 3\}과 {3,4}\{3, 4\}가 주어지면 해가 없다. 위치 00, 33, 44가 모두 같은 염기(예: T)로 바뀌어야 하는데, 그러면 연속한 위치 33과 44를 함께 바꿔야 하므로 규칙에 어긋난다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 두 정수 NN과 TT (1≤N≤100001 \le N \le 10000, 1≤T≤60001 \le T \le 6000)가 주어진다. NN은 서열의 길이, TT는 부분집합의 개수이다. 다음 줄에는 길이가 NN이고 문자가 모두 ACGT에 속하는 DNA 서열이 주어진다.

이어지는 TT개의 줄은 각각 하나의 부분집합을 나타낸다. 각 줄은 L:로 시작하며, LL (0≤L≤N0 \le L \le N)은 부분집합에 속한 위치의 개수이고, 그 뒤에 00부터 N−1N - 1 사이의 서로 다른 위치 LL개가 오름차순으로 이어진다. 부분집합끼리는 일부 또는 전부 겹칠 수 있다.

서로 다른 테스트 케이스는 빈 줄로 구분된다. 입력은 0 0이 적힌 줄로 끝나며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 한 줄에, 규칙을 지키면서 필요한 모든 제한을 회문으로 만들 수 있으면 YES를, 그렇지 않으면 NO를 출력한다.

예제3

  1. 예제 1

    입력
    5 3
    AGTAT
    2: 1 4
    2: 0 1
    3: 0 2 4
    
    5 3
    CATGC
    0:
    2: 0 3
    2: 3 4
    
    0 0
    
    예상 출력
    YES
    NO
    
  2. 예제 2

    입력
    1 1
    A
    1: 0
    0 0
    
    예상 출력
    YES
    
  3. 예제 3

    입력
    3 2
    AGA
    3: 0 1 2
    0:
    0 0
    
    예상 출력
    YES