만드는 중입니다

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

이진 문자열

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

요약
이진 문자열에 y번째 문자 뒤로 부분 문자열의 보수를 m번 삽입한 뒤, 최종 문자열의 앞 k글자를 구하는 문제입니다.
난이도

보통10점 중 6점

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

문제

0과 1로만 이루어진 길이 nn의 이진 문자열 SS가 주어진다.

SS의 인덱스는 1부터 시작하며, S[a:b]S[a : b]는 SS에서 인덱스 aa 이상 bb 이하의 부분 문자열을 뜻한다.

다음 삽입 연산을 mm번 적용한다. 각 연산은 정수 두 개 x≤yx \le y를 받으며, 연산마다 xx와 yy의 값은 다를 수 있다.

  • 삽입할 문자열은 S[x:y]S[x : y]의 0과 1을 뒤집은 것이다. 즉, 0은 1로, 1은 0으로 바꾼다.
  • 이 문자열은 SS의 yy번째 문자 바로 뒤에 삽입한다. 삽입 후 SS의 길이는 y−x+1y - x + 1만큼 늘어난다.
  • 연산마다 SS가 갱신된다. 다음 연산은 갱신된 SS를 사용한다.

목표는 mm번의 연산을 모두 적용한 최종 SS의 처음 kk글자를 구하는 것이다.

예를 들어 S=01010110S = 01010110, n=8n = 8, m=2m = 2, k=12k = 12이고, 연산 (x=2,y=4)(x = 2, y = 4)와 (x=3,y=5)(x = 3, y = 5)를 순서대로 적용한다고 하자. 첫 번째 연산은 S[2:4]=101S[2 : 4] = 101을 뒤집은 101101의 반대인 010을 삽입하여 S = 01010100110을 만든다(굵은 부분이 삽입된 부분이다). 두 번째 연산은 S[3:5]=010S[3 : 5] = 010을 뒤집은 101을 삽입하여 S = 01010101100110을 만든다. k=12k = 12이므로 답은 처음 12글자인 010101011001이다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다 (1≤T≤101 \le T \le 10).

각 테스트 케이스의 첫 줄에는 nn, mm, kk가 공백으로 구분되어 주어진다.

둘째 줄에는 길이가 nn인 문자열이 주어지며, 각 문자는 0 또는 1이다.

다음 mm개의 줄에는 각각 정수 xix_i, yiy_i가 주어진다. 입력은 항상 1≤xi≤yi≤1 \le x_i \le y_i \le min(i번째 연산을 적용하기 직전 SS의 길이, 101210^{12})을 만족한다.

또한 kk는 mm번의 연산을 모두 적용한 뒤 얻은 SS의 길이와 10610^6 중 작은 값을 넘지 않는다.

출력

각 테스트 케이스마다 길이 kk인 문자열을 한 줄에 출력한다.

힌트

  • 케이스 2: 1010은 10010이 된다. k=4k = 4이므로 처음 4자리만 출력한다.
  • 케이스 3: 10101100은 1001101100이 되고, 이어서 10011011110010000이 된다. k=16k = 16이므로 처음 16자리만 출력한다.

예제1

  1. 예제 1

    입력
    3
    8 2 12
    01010110
    2 4
    3 5
    4 1 4
    1010
    1 1
    8 2 16
    10101100
    1 2
    2 8
    
    예상 출력
    010101011001
    1001
    1001101111001000