#include using namespace std; #ifdef _RUTHEN #include "debug.hpp" #else #define show(...) true #endif using ll = long long; #define rep(i, n) for (int i = 0; i < (n); i++) template using V = vector; #include using mint = atcoder::modint998244353; int main() { ios::sync_with_stdio(false); cin.tie(0); int N; string S; cin >> N >> S; V dp(3, 0); mint ans = 0; rep(i, N) { V np(3, 0); for (int d = (S[i] == '?' ? 0 : S[i] - '0'); d <= (S[i] == '?' ? 9 : S[i] - '0'); d++) { rep(j, 3) np[(d + j) % 3] += dp[j]; np[d % 3]++; } ans += np[0]; dp = np; } cout << ans.val() << '\n'; return 0; }