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

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

비밀번호 나열하기

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

요약
고정된 자리와 M개의 팰린드롬 구간 조건을 만족하는 길이 N의 0/1 문자열 개수를 10^9+7로 나눈 나머지로 구합니다. 조건이 모순되면 0을 출력합니다.
난이도

어려움10점 중 8점

유형
유니온 파인드, 문자열, 수학
정답자
아직 제출이 없습니다

문제

마이클은 거의 알려지지 않은 사무실의 관리자이다. 그의 방에는 직원들에게 줄 돈이 든 금고가 있다. 안타깝게도 마이클은 금고 비밀번호를 잊어버렸고, 이제 상사를 돕는 일은 드와이트의 몫이다. 비밀번호는 0 또는 1로 이루어진 길이 NN의 숫자열이다. 마이클은 일부 위치의 숫자만 기억하고 전체 비밀번호는 기억하지 못한다. 또한 비밀번호의 구간 MM개가 회문이라는 사실을 기억한다. 그는 이유는 모르지만 회문을 잘 기억한다. 구간의 첫 숫자와 마지막 숫자가 같고, 두 번째 숫자와 끝에서 두 번째 숫자가 같으며, 이런 식으로 끝까지 같으면 그 구간은 회문이다. 드와이트는 비밀번호 전체를 복원하기가 얼마나 어려운지 알고 싶어 한다. 마이클의 기억에 맞는 비밀번호의 개수를 세면 그 답을 알 수 있다. 답이 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 출력한다.

입력

첫 줄에 두 정수 NN과 MM이 주어진다 (1≤N≤3×1051 \le N \le 3 \times 10^5, 1≤M≤3×1051 \le M \le 3 \times 10^5). 둘째 줄에는 길이 NN의 문자열 sis_i가 주어진다. sis_i가 0 또는 1이면 비밀번호의 ii번째 숫자가 그 값이라는 뜻이다. sis_i가 ?이면 마이클이 ii번째 숫자를 기억하지 못한다는 뜻이다. 이어지는 MM개의 줄에는 정수 lil_i와 rir_i가 주어지며(1≤li≤ri≤N1 \le l_i \le r_i \le N), 비밀번호의 lil_i번째부터 rir_i번째까지 구간(양 끝 포함)이 회문이라는 뜻이다.

출력

마이클의 기억끼리 모순되어 모든 조건을 만족하는 비밀번호가 없으면 0을 출력한다. 그렇지 않으면 모든 조건을 만족하는 비밀번호의 개수를 109+710^9 + 7로 나눈 나머지를 출력한다.

예제3

  1. 예제 1

    입력
    5 2
    1??0?
    1 3
    2 4
    
    예상 출력
    2
    
  2. 예제 2

    입력
    3 2
    ???
    1 1
    1 3
    
    예상 출력
    4
    
  3. 예제 3

    입력
    5 2
    1???0
    1 3
    3 5
    
    예상 출력
    0