Problem: We will call a string that can be obtained by concatenating two equal strings an even string. For example, `xyzxyz` and `aaaaaa` are even, while `ababab` and `xyzxy` are not.

For a non-empty string S, we will define f(S) as the shortest even string that can be obtained by appending one or more characters to the end of S. For example, f(`abaaba`)=`abaababaab`. It can be shown that f(S) is uniquely determined for a non-empty string S.

You are given an even string S consisting of lowercase English letters. For each letter in the lowercase English alphabet, find the number of its occurrences from the l-th character through the r-th character of f^{10^{100}} (S).

Here, f^{10^{100}} (S) is the string f(f(f( ... f(S) ... ))) obtained by applying f to S 10^{100} times.

Constraints

* 2 \leq |S| \leq 2\times 10^5
* 1 \leq l \leq r \leq 10^{18}
* S is an even string consisting of lowercase English letters.
* l and r are integers.

Input

Input is given from Standard Input in the following format:


S
l r


Output

Print 26 integers in a line with spaces in between. The i-th integer should be the number of the occurrences of the i-th letter in the lowercase English alphabet from the l-th character through the r-th character of f^{10^{100}} (S).

Examples

Input

abaaba
6 10


Output

3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


Input

xx
1 1000000000000000000


Output

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000000000000000000 0 0


Input

vgxgpuamkvgxgvgxgpuamkvgxg
1 1000000000000000000


Output

87167725689669676 0 0 0 0 0 282080685775825810 0 0 0 87167725689669676 0 87167725689669676 0 0 87167725689669676 0 0 0 0 87167725689669676 141040342887912905 0 141040342887912905 0 0

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
typedef pair<int, int> pii;

#define fst first
#define snd second
#define pb push_back
#define eb emplace_back
#define REP(i, a, b)  for(int i = (a), i##end = (b); i < i##end; ++i)
#define DREP(i, a, b) for(int i=(a-1), i##end = (b); i >=i##end; --i)

template <typename T> bool chkmax(T& a, T b) { return a < b ? a = b, 1 : 0; }
template <typename T> bool chkmin(T& a, T b) { return a > b ? a = b, 1 : 0; }

const int oo = 0x3f3f3f3f;
const int maxn = 2e5 + 10;

template<typename T> T read() {
    T n(0), f(1);
    char ch = getchar();
    for( ;!isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
    for( ; isdigit(ch); ch = getchar()) n = n * 10 + ch - 48; 
    return n * f;
}

LL n, l, r, k;
char st[maxn];
LL nxt[maxn], ans[30];

void solve(LL len, LL flag) {
    if(len <= n) {
        for(int i = 0; i < len; i++) ans[st[i] - 'a'] += flag;
    }else {
        LL ts, tt;
        LL s = 1, t = 0, ls = 0, lt = 1;

        while(s*n + t*k < len) {
            ts = ls, tt = lt;
            ls = s, lt = t;
            s += ts, t += tt;
        }

        solve(len - ls*n - lt*k, flag);

        for(int i = 0; i < k; i++) ans[st[i] - 'a'] += flag * lt;
        for(int i = 0; i < n; i++) ans[st[i] - 'a'] += flag * ls;
    }
}

void get_nxt() {

    n = strlen(st) / 2; 
    nxt[0] = nxt[1] = 0;
    for(int i = 1; i < n; i++) {
        int j = nxt[i];
        while(j && st[j] != st[i]) j = nxt[j];

        nxt[i+1] = j + (st[j] == st[i]);
    }

    k = n - nxt[n];
    //cerr << (k) << endl;
}

int main() {
#ifdef Wearry
    freopen("data.txt", "r", stdin);
    freopen("ans.txt", "w", stdout);
#endif

    scanf("%s%lld%lld", st, &l, &r);

    get_nxt();
    solve(r, 1);
    solve(l-1, -1);

    for(int i = 0; i < 26; i++) printf("%lld ", ans[i]);
    puts("");

    return 0;
}