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++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
#define ADD(a, b) a = (a + (ll)b) % mod
#define MUL(a, b) a = (a * (ll)b) % mod
#define MAX(a, b) a = max(a, b)
#define MIN(a, b) a = min(a, b)
#define rep(i, a, b) for(int i = (a); i < (b); i++)
#define rer(i, a, b) for(int i = (a) - 1; i >= (b); i--)
#define all(a) (a).begin(), (a).end()
#define sz(v) (int)(v).size()
#define pb push_back
#define sec second
#define fst first
#define debug(fmt, ...) Debug(__LINE__, ":", fmt, ##__VA_ARGS__)
using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
typedef pair<int, pi> ppi;
typedef vector<ll> vi;
typedef complex<double> comp;
void Debug() {cout << '\n'; }
template<class FIRST, class... REST>void Debug(FIRST arg, REST... rest) { 
	cout << arg << " "; Debug(rest...); }
template<class T>ostream& operator<< (ostream& out, const vector<T>& v) {
	out << "[";if(!v.empty()){rep(i,0,sz(v)-1)out<<v[i]<< ", ";out<<v.back();}out << "]";return out;}
template<class S, class T>ostream& operator<< (ostream& out, const pair<S, T>& v) {
	out << "(" << v.first << ", " << v.second << ")";return out;}
const int MAX_N = 200010;
const double eps = 1e-6;
const ll mod = 1000000007;
const int inf = 1 << 30;
const ll linf = 1LL << 60;
const double PI = 3.14159265358979323846;
///////////////////////////////////////////////////////////////////////////////////////////////////

int N; ll L, R;
int A[MAX_N];
ll C[210][26];
ll D[210];

vector<int> MP(string S) { //it doesn't include itself
	int n = (int)S.size();
	vector<int> A(n + 1);
	A[0] = -1;
	rep(i, 0, n) {
		int j = A[i];
		while (j >= 0 && S[i] != S[j]) j = A[j];
		j++;
		A[i + 1] = j;
	}
	return A;
}

vi calc1(ll n) {
	ll a = n / N;
	ll b = n % N;
	// debug(a, b);
	vector<ll> cnt1(26, 0);
	vector<ll> cnt2(26, 0);
	rep(i, 0, N) {
		if(i < b) cnt2[A[i]]++;
		cnt1[A[i]]++;
	}
	rep(i, 0, 26) cnt1[i] = cnt1[i] * a + cnt2[i];
	return cnt1;
}

vi calc2(ll n, int m) {
	vector<ll> res(26, 0);
	for(int i = m - 1; i >= 0; i--) {
		if(n - D[i] >= 0) {
			n -= D[i];
			rep(j, 0, 26) {
				res[j] += C[i][j];
			}
		}
	}
	rep(i, 0, n) {
		res[A[i]]++;
	}
	return res;
}

void solve() {
	string str;
	cin >> str;
	N = sz(str) / 2;
	string tmp;
	rep(i, 0, N) tmp += str[i];
	// debug(str, tmp);
	int a = MP(tmp)[N];

	rep(i, 0, N) A[i] = str[i] - 'a';
	// debug(vi(A, A + N));
	cin >> L >> R; L--;
	if(a == 0) {
		vi lv = calc1(L);
		vi rv = calc1(R);
		// debug(lv, rv);
		rep(i, 0, 26) {
			rv[i] -= lv[i];
			cout << rv[i] << " ";
		}
		cout << "\n";
	}
	else {
		rep(i, 0, N) {
			C[0][A[i]]++; C[1][A[i]]++;
			if(i < N - a) C[1][A[i]]++;
		}
		D[0] = N; D[1] = 2 * N - a;
		int i = 0;
		for(i = 2; ; i++) {
			D[i] = D[i - 1] + D[i - 2];
			rep(j, 0, 26) C[i][j] = C[i - 1][j] + C[i - 2][j];
			if(D[i] >= R) break;
		}
		vi lv = calc2(L, i);
		vi rv = calc2(R, i);
		// debug(lv, rv);
		rep(i, 0, 26) {
			rv[i] -= lv[i];
			cout << rv[i] << " ";
		}
		cout << "\n";
	}
}

int main() {
#ifndef LOCAL
	ios::sync_with_stdio(false);
    cin.tie(0);
#endif
    cout << fixed;
	cout.precision(5);
#ifdef LOCAL
    freopen("in.txt", "rt", stdin);
#endif	
	solve();
#ifdef LOCAL
    cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
	return 0;
}