#include #define endl '\n' #define trace(x) cerr << #x << " = " << x << endl #define sz(x) ((int)x.size()) #define all(x) x.begin(), x.end() using namespace std; template inline bool chkmax(T &x, const T1 &y) { return x < y ? x = y, true : false; } template inline bool chkmin(T &x, const T1 &y) { return x > y ? x = y, true : false; } string s; void read() { cin >> s; } int cnt[10]; int timestamp = 0; int calced[1000005][10]; int dp[1000005][10]; inline int sum(int a, int b) { int ans = a + b; return ans >= 9 ? ans - 9 : ans; } int f(int i, int m, int mod) { if (i == sz(s)) return 0; if (calced[i][m] == timestamp) return dp[i][m]; int x = s[i] - '0'; int ans = (sum(x, m) == mod) + f(i + 1, sum(x, m), mod); calced[i][m] = timestamp; return dp[i][m] = ans; } void solve() { memset(calced, 0, sizeof(calced)); for (int mod = 0; mod < 9; mod++) { int idx = !mod ? 9 : mod; cnt[idx] = 0; timestamp++; for (int i = 0; i < sz(s); i++) cnt[idx] += f(i, 0, mod); } for (int i = 1; i <= 9; i++) cout << cnt[i] << " \n"[i == 9]; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); freopen("digits.in", "rt", stdin); freopen("digits.out", "wt", stdout); read(); solve(); return EXIT_SUCCESS; }