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 <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
typedef long long ll ;
#define rep(i, a, b) for (int i = a; i <= b; ++ i) 
const int N = 2e5 + 5 ;
using namespace std ;

char s[N] ;
int p[N], n, f[N][26], top = 0 ;
struct poi {
	ll sum[26], cnt ;
} a[N] ;

void solve(int c, ll x, ll (&ret)[26]) {
	rep(i, 0, 25) ret[i] = 0 ;
	if (x <= (ll) n) {
		rep(i, 1, x) ++ ret[s[i] - 'a'] ;
		return ;
	}
	if (x <= a[c - 1].cnt) {
		solve(c - 1, x, ret) ;
		return ;
	}
	solve(c - 2, x - a[c - 1].cnt, ret) ;
	rep(i, 0, 25) ret[i] += a[c - 1].sum[i] ;
}

int main() {
	scanf("%s", s + 1) ;
	n = strlen(s + 1) ; n /= 2 ;
	p[1] = 0 ; int j = 0 ;
	rep(i, 2, n) {
		for ( ; j && s[j + 1] != s[i] ; ) j = p[j] ;
		if (s[j + 1] == s[i]) ++ j ; 
		p[i] = j ;
	}
	rep(i, 1, n) {
		rep(j, 0, 25) f[i][j] = f[i - 1][j] ;
		++ f[i][s[i] - 'a'] ;
	}
	top = 1 ;
	a[1].cnt = n ;
	rep(i, 0, 25) a[1].sum[i] = f[n][i] ;
	a[0].cnt = n - p[n] ;
	rep(i, 0, 25) a[0].sum[i] = f[a[0].cnt][i] ;
	for ( ; ; ) {
		++ top ;
		a[top].cnt = a[top - 1].cnt + a[top - 2].cnt ;
		rep(i, 0, 25) a[top].sum[i] = a[top - 1].sum[i] + a[top - 2].sum[i] ;
		if (a[top].cnt > 1e18) break ;
	}
	ll A[26], B[26], l, r ;
	scanf("%lld%lld", &l, &r) ;
	solve(top, r, A), solve(top, l - 1, B) ;
	rep(i, 0, 25) printf("%lld ", A[i] - B[i]) ; puts("") ;
	return 0 ; 
}