만드는 중입니다

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

키프로스의 인어

시간 제한1초메모리 제한2048 MB

요약
0, 1, ?로 이루어진 목걸이의 ?를 채우는 방법 중, 인접한 같은 색 구슬 쌍을 반복해 지워 전부 없앨 수 있는 경우의 수를 998244353으로 나눈 나머지로 구합니다.
난이도

보통10점 중 6점

유형
조합론, 문자열, 수학
정답자
아직 제출이 없습니다

문제

매년 여름 Stelinuța는 11일 동안 열리는 프로그래밍 캠프에 참가하러 키프로스에 간다. 그곳에 머무는 동안에는 바다에서 수영하고 스노클링하는 것을 즐긴다.

어느 날 스노클링을 하던 그녀는 아주 흥미로운 진주 목걸이를 발견했다. 진주가 달린 직선형(고리 모양이 아닌) 실이었다. 원래 모든 진주는 검은색이거나 흰색이었다. 하지만 일부 진주는 손상이 심해서 원래 색을 구별할 수 없었다.

이때 Stelinuța에게 아이디어가 떠올랐다. 목걸이에서 색이 같은 인접한 진주 두 개를 제거할 수 있다고 하자. 이 연산을 몇 번이든 적용해서 빈 목걸이만 남길 수 있도록 하는, 원래 목걸이의 서로 다른 색 배열은 몇 가지인가? 답이 매우 클 수 있으므로 998 244 353998\,244\,353으로 나눈 나머지를 구하면 된다.

입력

첫 줄에 Stelinuța가 발견한 목걸이를 나타내는 1, 0, ?로 이루어진 문자열이 주어진다. 각 진주는 다음과 같이 나타낸다.

  • 1: 검은색 진주
  • 0: 흰색 진주
  • ?: 원래 색을 알 수 없는 진주

문자열의 길이는 1 이상 2⋅1052 \cdot 10^{5} 이하이다.

출력

서로 다른 목걸이 모양의 수를 998 244 353998\,244\,353으로 나눈 나머지를 한 줄에 출력한다.

힌트

입력 예에서 가능한 목걸이는 011110 하나뿐이다. 11을 두 번 제거한 뒤 남은 00을 제거하면 빈 목걸이가 된다. 나머지 모든 경우에는 같은 색의 인접한 진주를 반복해서 제거하여 진주를 모두 없앨 방법이 없다.

예제1

  1. 예제 1

    입력
    01?1??
    
    예상 출력
    1