#include #define rep(i,a,b) for (int i = a; i < b; i++) #define rrep(i,a,b) for (int i = a - 1; i >= b; i--) #define rng(a) a.begin(), a.end() #define rrng(a) a.rbegin(), a.rend() #define eb emplace_back #define pb push_back #define fi first #define se second #define pvec(a) for (int i = 0; i < a.size(); i++) cout << a[i] << " "; cout << '\n' #define dbwt(a) cout << fixed << setprecision(15) << a << '\n' using namespace std; using ll = long long; void wt() {cout << endl;} templatebool chmin(T& a, U b) {if (a > b) {a = b; return 1;} return 0;} templatebool chmax(T& a, U b) {if (a < b) {a = b; return 1;} return 0;} templatelong long llceil(T a, U b) {return (long long)(a + b - 1) / b;} templatevoid wt(H&& h, T&&... t){cout<(t)...);} //-------------------------------------------------------------------------------------// const ll mod = 998244353; int main() { string S; cin >> S; int N = S.size(); vector r2(N, 1LL), r11(N, 1LL); rep (i, 1, N) r2[i] = r2[i-1] * 2 % mod; rep (i, 1, N) r11[i] = r11[i-1] * 11 % mod; ll ans = 0; rep (i, 0, N) { ans += r2[i]*r11[N-i-1]%mod * (ll)(S[i]-'0')%mod; ans %= mod; } cout << ans << endl; return 0; }