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
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int N = 5 * 100000 + 100;

const int oo = 1e9;

string s;
ll L , R;
int pre[N];
ll len[N], f[N][26];

void kmp() {
	int idx = 0;
	for (int i = 1; i < s.size(); ++i) {
		while (idx > 0 && s[i] != s[idx])idx = pre[idx - 1];
		if (s[i] == s[idx])++idx;
		pre[i] = idx;
	}
}
ll calc(int c , ll rem) {
	if (rem <= s.size()){
		ll res = 0;
		for (int i = 0; i < rem; ++i)
			if (c == s[i] - 'a')res++;
		return res;
	}
	int id = 2;
	while (rem >= len[id - 2] + len[id - 1]) {
		f[id][c] = f[id - 2][c] + f[id - 1][c];
		len[id] = len[id - 2] + len[id - 1];
		id++;
	}

	if (len[id - 1] == rem)return f[id - 1][c];
	return f[id - 1][c] + calc(c, rem - len[id - 1]);
}
int main() {
	cin >> s;
	cin >> L >> R;
	kmp();
	len[1] = s.size() / 2;
	len[0] = s.size() / 2 - pre[s.size() / 2 - 1];
	for (int i = 0; i < len[0]; ++i)
		f[0][s[i] - 'a']++;
	for (int i = 0; i < len[1]; ++i)
		f[1][s[i] - 'a']++;
	for (int i = 0; i < 26; ++i) {
		if (i)printf(" ");
		printf("%lld", calc(i, R) - calc(i, L - 1));
	}
	puts("");
	return 0;
}