Problem:
Score : 1100 points

Problem Statement

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).

Sample Input 1

abaaba
6 10

Sample Output 1

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

Since f(abaaba)=abaababaab, the first ten characters in f^{10^{100}}(S) is also abaababaab. Thus, the sixth through the tenth characters are abaab. In this string, a appears three times, b appears twice and no other letters appear, and thus the output should be 3 and 2 followed by twenty-four 0s.

Sample Input 2

xx
1 1000000000000000000

Sample Output 2

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

Sample Input 3

vgxgpuamkvgxgvgxgpuamkvgxg
1 1000000000000000000

Sample Output 3

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 C (GCC 9.2.1) (judge verdict: Accepted)

#include <stdio.h>
#include <string.h>

#define N	200000
#define A	26
#define K	100

int max(int a, int b) { return a > b ? a : b; }

int period(char *cc, int n) {
	static int zz[N];
	int i, l, r;

	for (i = 1, l = r = 0; i < n; i++)
		if (zz[i - l] < r - i)
			zz[i] = zz[i - l];
		else {
			l = i, r = max(r, l);
			while (r < n && cc[r] == cc[r - l])
				r++;
			zz[i] = r - l;
		}
	for (i = 1; i < n; i++)
		if (zz[i] == n - i)
			break;
	return i;
}

long long ans[A];

void solve(char *cc, int n, int m, long long r, int sign) {
	static long long len[K], cnt[K][A];
	int h, i, a, k;

	len[0] = m, memset(cnt[0], 0, sizeof cnt[0]);
	for (i = 0; i < m; i++)
		cnt[0][cc[i] - 'a']++;
	len[1] = n, memset(cnt[1], 0, sizeof cnt[1]);
	for (i = 0; i < n; i++)
		cnt[1][cc[i] - 'a']++;
	k = 2;
	while (len[k - 1] < r) {
		len[k] = len[k - 1] + len[k - 2];
		for (a = 0; a < A; a++)
			cnt[k][a] = cnt[k - 1][a] + cnt[k - 2][a];
		k++;
	}
	for (h = k - 1; h >= 0; h--)
		if (r >= len[h]) {
			for (a = 0; a < A; a++)
				ans[a] += cnt[h][a] * sign;
			r -= len[h];
		}
	for (i = 0; i < r; i++)
		ans[cc[i] - 'a'] += sign;
}

int main() {
	static char cc[N + 1];
	int n, m, i, a;
	long long l, r;

	scanf("%s%lld%lld", cc, &l, &r), n = strlen(cc) / 2, l--;
	m = period(cc, n);
	if (n % m == 0) {
		while (l < r && l % m != 0)
			ans[cc[l++ % m] - 'a']++;
		while (l < r && r % m != 0)
			ans[cc[--r % m] - 'a']++;
		for (i = 0; i < m; i++)
			ans[cc[i] - 'a'] += (r - l) / m;
	} else
		solve(cc, n, m, r, 1), solve(cc, n, m, l, -1);
	for (a = 0; a < A; a++)
		printf("%lld ", ans[a]);
	printf("\n");
	return 0;
}