만드는 중입니다

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

XOR 최대

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

요약
이진 문자열에서 부분 문자열 두 개를 골라 각각을 이진수로 읽은 값의 XOR이 가장 커지는 값을 구합니다.
난이도

보통10점 중 7점

유형
문자열, 비트 연산, 문자열 매칭
정답자
아직 제출이 없습니다

문제

어떤 문자열에서 연속한 위치에 있는 1개 이상의 문자를 골라 순서를 유지한 채 나열해서 얻은 문자열을 그 문자열의 부분문자열이라고 한다. 예를 들어 001001은 X=1001‾1X = 1\underline{001}1의 부분문자열이지만, Y=10101Y = 10101의 부분문자열은 아니다.

음이 아닌 두 정수 AA, BB의 배타적 논리합 A⊕BA \oplus B는 다음과 같이 정의한다.

  • 이진법으로 나타냈을 때, AA의 2k2^k 자리와 BB의 2k2^k 자리가 다르면 A⊕BA \oplus B의 2k2^k 자리는 1이다. 같으면 0이다. (단, k≥0k \ge 0)

예를 들어 12⊕1012 \oplus 10에서 12=1100(2)12 = 1100_{(2)}, 10=1010(2)10 = 1010_{(2)}이므로, 1100(2)⊕1010(2)=0110(2)=61100_{(2)} \oplus 1010_{(2)} = 0110_{(2)} = 6이다.

00과 11로만 이루어진 길이 NN의 문자열 SS가 주어진다.

SS의 부분문자열 ss에 대해 f(s)f(s)는 ss를 이진수로 해석한 값이다. 예를 들어 s=11010s = 11010이면 f(s)=26f(s) = 26이다.

g(s1,s2)g(s_1, s_2)는 f(s1)f(s_1)과 f(s2)f(s_2)의 배타적 논리합이다. SS의 부분문자열 s1s_1, s2s_2를 골라 만들 수 있는 g(s1,s2)g(s_1, s_2)의 최댓값을 구하라.

s1s_1과 s2s_2가 서로 달라야 하는 것은 아니다. SS에서 일부가 겹쳐도 되고, 완전히 같은 부분문자열이어도 된다.

입력

첫 번째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스는 두 줄로 이루어진다. 첫 번째 줄에 문자열의 길이 NN이, 두 번째 줄에 00과 11로만 이루어진 길이 NN의 문자열 SS가 주어진다.

출력

각 테스트 케이스마다 g(s1,s2)g(s_1, s_2)의 최댓값을 이진법으로 한 줄에 출력한다. 불필요한 앞자리 0은 출력하지 않는다.

제한

  • 입력으로 주어지는 모든 수는 정수이다.
  • 1≤T≤1001 \le T \le 100
  • 2≤N≤1072 \le N \le 10^7
  • 모든 테스트 케이스에서 NN의 합은 10710^7 이하이다.
  • SS는 00과 11로만 이루어진 길이 NN의 문자열이다.

예제2

  1. 예제 1

    입력
    4
    3
    010
    5
    10101
    5
    00100
    5
    11111
    
    예상 출력
    11
    11111
    110
    11110
    
  2. 예제 2

    입력
    4
    2
    00
    2
    01
    2
    10
    2
    11
    
    예상 출력
    0
    1
    11
    10