직교 폐포

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

요약
이진 문자열 S의 두 원형 이동을 XOR한 결과들의 집합에 문자열 T가 속하는지, n이 5000까지인 상황에서 효율적으로 판별해야 합니다.
난이도

보통10점 중 7점

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

문제

길이가 같은 두 이진 문자열 aa와 bb(길이 nn)의 직교 합(orthogonal sum)은 ci=ai⊕bic_i = a_i \oplus b_i로 정의되는 문자열 cc이다. 여기서 ⊕\oplus는 배타적 논리합(XOR)으로, 두 문자가 같으면 00을, 다르면 11을 반환한다.

길이가 nn인 이진 문자열 SS에 대해, S(k)S(k)를 SS의 kk번째 순환 이동(circular shift)이라 하자. 이는 SS의 마지막 kk개 문자를 문자열의 맨 앞으로 옮기는 연산이다. 예를 들어 abcde의 2번째 순환 이동은 deabc이다.

SS의 직교 폐포(orthogonal closure)는 S⊕S^{\oplus}로 표기하며, 0≤k,l≤n−10 \le k, l \le n - 1인 모든 문자열 S(k)⊕S(l)S(k) \oplus S(l)들의 집합이다.

길이가 같은 이진 문자열 TT가 주어졌을 때, TT가 S⊕S^{\oplus}에 속하는지 판별하시오.

입력

첫째 줄에 문자열 TT가, 둘째 줄에 문자열 SS가 주어진다. 두 문자열의 길이는 서로 같으며 11 이상 50005000 이하이고, 각 문자는 0 또는 1이다.

출력

TT가 S⊕S^{\oplus}에 속하면 Yes를, 그렇지 않으면 No를 출력한다.

예제6

  1. 예제 1

    입력
    11111
    10101
    
    예상 출력
    No
    
  2. 예제 2

    입력
    11110
    10101
    
    예상 출력
    Yes
    
  3. 예제 3

    입력
    0
    0
    
    예상 출력
    Yes
    
  4. 예제 4

    입력
    1
    1
    
    예상 출력
    No
    
  5. 예제 5

    입력
    0
    1
    
    예상 출력
    Yes
    
  6. 예제 6

    입력
    1010
    1100
    
    예상 출력
    Yes