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
#pragma GCC optimize(3) 
#include<iostream>
#include<iomanip>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set> 
#include<map>
#include<string>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#define ll long long
#define db long double
#define inf 200001
#define INF (ll)1e15 
#define pi acos(-1)
#define mxbit 30
#define rd(n) {n=0;char ch;int f=0;do{ch=getchar();if(ch=='-'){f=1;}}while(ch<'0'||ch>'9');while('0'<=ch&&ch<='9'){n=(n<<1)+(n<<3)+ch-48;ch=getchar();}if(f)n=-n;}
using namespace std;

char str[inf];
int nxt[inf];
ll sum[26][inf];
int n,lens;

void getnxt(void){
	int k=0;
    nxt[0]=0;
    for (int i=2;i<=n;i++){
        while (k && str[k+1]!=str[i]){
            k=nxt[k];
        }
        if (str[k+1]==str[i]){
            k++;
        }
        nxt[i]=k;
    }
    return;
}

ll query(ll x,int p){
	if (x<n){
		return sum[p][x];
	}
	ll a=sum[p][lens],b=sum[p][n];
	ll l1=lens,l2=n;
    while(l1+l2<x){
    	a+=b;
		swap(a,b);
		l1+=l2;
		swap(l1,l2);
	}
    return b+query(x-l2,p);
}

int main(){
	scanf("%s",str+1);
	n=strlen(str+1)/2;
	getnxt();
	lens=n-nxt[n];
	for (int i=0;i<26;i++){
		for (int j=1;j<=n;j++){
			sum[i][j]=sum[i][j-1]+(str[j]-'a'==i);
		}
	}
	ll l,r;
	rd(l) rd(r)
	for (int i=0;i<26;i++){
		printf("%lld ",query(r,i)-query(l-1,i));
	}
	return 0;
}