지식

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

요약
문자열 s에서 aa, bbb, ababab 블록을 넣거나 지우는 연산으로 길이가 x인 문자열을 만들 수 있는 경우의 수를 구해 998244353으로 나눈 나머지를 출력한다.
난이도

어려움10점 중 9점

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

문제

영소문자 “a”와 “b”로 이루어진 문자열 ss가 주어진다.

다음 연산을 원하는 순서로 0번 이상 수행할 수 있다.

  • 문자열의 임의 위치에서 “aa”를 지운다.
  • 문자열의 임의 위치에서 “bbb”를 지운다.
  • 문자열의 임의 위치에서 “ababab”를 지운다.
  • 문자열의 임의 위치에 “aa”를 넣는다.
  • 문자열의 임의 위치에 “bbb”를 넣는다.
  • 문자열의 임의 위치에 “ababab”를 넣는다.

이 연산들로 얻을 수 있는 길이 xx인 문자열의 개수를 구하시오. 답이 매우 클 수 있으므로 998 244 353으로 나눈 나머지를 구한다.

입력

첫째 줄에 문자열의 길이 nn이 주어진다. (1≤n≤300 0001 \le n \le 300\,000)

둘째 줄에 영소문자 “a”와 “b”로 이루어진 길이 nn의 문자열 ss가 주어진다.

셋째 줄에 얻어야 하는 문자열의 길이 xx가 주어진다. (0≤x≤1090 \le x \le 10^9)

출력

문자열 ss에서 위 연산들을 수행해 얻을 수 있는 길이 xx인 문자열의 개수를 998 244 353으로 나눈 나머지를 출력한다.

예제3

  1. 예제 1

    입력
    6
    ababab
    3
    
    예상 출력
    1
    
  2. 예제 2

    입력
    3
    bbb
    2
    
    예상 출력
    1
    
  3. 예제 3

    입력
    5
    babab
    35
    
    예상 출력
    866826000