만드는 중입니다

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

단어의 개수

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

요약
런 렝스로 압축된 문자열이 주어질 때, 전개한 문자열의 서로 다른 부분 수열의 개수를 998244353으로 나눈 나머지로 구한다.
난이도

어려움10점 중 8점

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

문제

알파벳 소문자로 이루어진 문자열 SS가 주어진다. 이 문자열 SS는 매우 길 수 있기 때문에 '압축 문자열'의 형태로 입력이 주어진다. '압축 문자열'은 (ci,vi)(c_i, v_i) 형태의 순서 쌍이 여러 개 나열된 형태로 표현된다. 주어진 '압축 문자열'을 문자열 SS로 복원하는 과정은 다음과 같다.

  1. 최초의 문자열 SS는 비어있다.
  2. i=1,2,⋯ ,Ni=1, 2, \cdots, N에 대하여 차례대로 문자열 SS의 맨 뒤에 문자 cic_i를 연속하여 viv_i개 덧붙인다.

예를 들어, (a,4)(a,4), (b,3)(b,3), (c,2)(c,2), (d,1)(d,1), (a,1)(a,1)로 주어진 '압축 문자열'을 복원한 문자열 SS는 S=aaaabbbccdaS=aaaabbbccda이다.

이때, SS의 서로 다른 subsequence의 개수를 구하여라. 값이 매우 클 수 있으니 998244353으로 나눈 나머지를 출력하도록 한다. subsequence XX, YY가 서로 다르다는 것은, ∣X∣≠∣Y∣|X| \ne |Y|이거나, ∣X∣=∣Y∣|X| = |Y|이면서 어떤 ii에 대해 Xi≠YiX_i \ne{} Y_i, 1≤i≤∣X∣1 \le{} i \le{} |X|가 성립함을 의미한다.

입력

첫째 줄에 문자열 SS의 압축 문자열의 순서쌍 개수를 의미하는 N(1≤N≤1,000,000)N (1 \le N \le 1,000,000)이 주어진다.

다음 줄부터 NN줄에 걸쳐 압축 문자열의 ii번째 순서쌍 (ci,vi)(c_i,v_i)가 차례대로 주어진다. cic_i는 알파벳 소문자이고, vi(1≤vi≤109)v_i (1 \le v_i \le 10^9)는 개수를 의미한다. 또한 1<i1<i일 때, ci−1≠cic_{i-1} \ne c_i이다.

출력

서로 다른 subsequence의 개수를 998244353으로 나눈 나머지를 출력하라.

힌트

subsequence란 주어진 문자열의 일부 항을 원래 순서대로 나열하여 얻을 수 있는 문자열을 의미한다.

예제1

  1. 예제 1

    입력
    3
    a 3
    b 3
    c 3
    
    예상 출력
    63