Problem: Please pay attention to the unusual memory limit in this problem.

In a parallel universe, Satan is called "Trygub". For that reason, the letters of his namesake were deleted from the alphabet in ancient times.

The government has n workers standing in a row and numbered with integers from 1 to n from left to right. Their job categories can be represented as a string s of length n, where the character s_i represents the job category of the i-th worker.

A new law will be approved to increase the equality between the workers. The government decided to make everyone have the same job category by performing the following operation any number of times (possibly zero).

There is a fixed rational parameter k=\frac ab describing how easy it is to convince the public, and it will be used to determine the success of an operation.

In an operation, the government first selects a job category x with at least one worker at the current moment. Suppose i_1,…, i_m (i_1<…<i_m) are the positions of all the workers with job category x. If k⋅ (i_m-i_1+1)≤ m, the government is able to choose any job category y with at least one worker at the current moment and change the job category of all workers with job category x to job category y.

If it is possible to make all workers have job category x, we say that x is obtainable. Can you tell the government the set of obtainable job categories?

Input

The first line contains three integers n, a, b (1 ≤ n ≤ 5000, 1≤ a≤ b≤ 10^5) — the number of workers and the numerator and denominator of the parameter k, respectively.

The second line contains a string s of length n, consisting of lowercase English characters — the job categories of each worker. The characters 't', 'r', 'y', 'g', 'u', and 'b' do not appear in the string s.

Output

Print an integer c equal to the number of obtainable job categories followed by c space-separated characters — the obtainable job categories sorted in the lexicographical order.

Example

Input


7 1 2
comicom


Output


3 c m o

Note

The first operation must select the job category 'i' because all other job categories cannot satisfy the condition, therefore 'i' is not obtainable.

Below is showed how to obtain 'c', 'm', and 'o'. The square brackets denote the segment containing all workers of the selected category, the red color denotes this category and the blue color denotes the new category after the change.

  * Get 'c': 
    1. (com\color{red}{[i]}com → com\color{#1E90FF}{[o]}com) 
    2. (c\color{red}{[o}m\color{red}{o}c\color{red}{o]}m → c\color{#1E90FF}{[m}m\color{#1E90FF}{m}c\color{#1E90FF}{m]}m) 
    3. (c\color{red}{[mmm}c\color{red}{mm]} → c\color{#1E90FF}{[ccc}c\color{#1E90FF}{cc]}) 
  * Get 'm': 
    1. (com\color{red}{[i]}com → com\color{#1E90FF}{[o]}com) 
    2. (c\color{red}{[o}m\color{red}{o}c\color{red}{o]}m → c\color{#1E90FF}{[c}m\color{#1E90FF}{c}c\color{#1E90FF}{c]}m) 
    3. (\color{red}{[cc}m\color{red}{ccc]}m → \color{#1E90FF}{[mm}m\color{#1E90FF}{mmm]}m) 
  * Get 'o': 
    1. (com\color{red}{[i]}com → com\color{#1E90FF}{[c]}com) 
    2. (\color{red}{[c}om\color{red}{cc]}om → \color{#1E90FF}{[m}om\color{#1E90FF}{mm]}om) 
    3. (\color{red}{[m}o\color{red}{mmm}o\color{red}{m]} → \color{#1E90FF}{[o}o\color{#1E90FF}{ooo}o\color{#1E90FF}{o]}) 

Solution (in CPP):

Solution:
#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")
#pragma GCC option("arch=native","tune=native","no-zero-upper")
#pragma GCC target("avx2")
#include <bits/stdc++.h>
using namespace std;
#define INF 2147483647
#define infL (1LL<<60)
#define inf (1<<30)
#define inf9 (1000000000)
#define MOD 998244353//1000000007
#define EPS 1e-9
#define Gr 9.8
#define PI acos(-1)
#define REP(i,n) for(int (i)=0;(i)<(int)(n);(i)++)
#define REQ(i,n) for(int (i)=1;(i)<=(int)(n);(i)++)
#define lch (rt<<1)
#define rch (rt<<1|1)
#define readmp(n) for(int i=0,u,v;i<n;i++) {scanf("%d%d",&u,&v); mp[u].push_back(v); mp[v].push_back(u);}
typedef  long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef long double ld;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef ld ValType;
template<typename  T> void maxtt(T& t1, T t2) {
    t1=max(t1,t2);
}
template<typename  T> void mintt(T& t1, T t2) {
    t1=min(t1,t2);
}
#define MAX (5135)

bool debug = 0;
int n,m,k;
int dx[4] = {0,1,0,-1}, dy[4] = {1,0,-1,0};
string direc="RDLU";
const ll MOD2 = (ll)MOD * (ll)MOD;
ll ln, lk, lm;
void etp(bool f = 0) {
    puts(f ?"YES" : "NO");
    exit(0);
}
void addmod(int &x, int y, int mod = MOD){
    x+=y; if (x>=mod) x-=mod;
    if(x<0) x+=mod;
    assert(x>=0 && x<mod);
}
void et(int x=-1) {
    printf("%d\n", x); exit(0);
}
ll fastPow(ll x, ll y, int mod=MOD) {
    ll ans = 1;
    while(y>0) {
        if(y&1) ans = (x * ans)%mod;
        x = x*x%mod;
        y>>=1;
    }
    return ans;
}
ll gcd1(ll x, ll y) {
    return y?gcd1(y,x%y):x;
}





int a,b;
string S="acdefhijklmnopqsvwxz";
char s[MAX], rid[33];
int L[1<<20],R[1<<20],c[MAX], id[30], cnt, Ct[1<<20];
bool dp[1<<20];
int gid(char x) {
    if(id[x-'a']==-1) {
        id[x-'a']=cnt++; rid[cnt-1]=x;
    }return id[x-'a'];
}
void fmain(int tid) {
    scanf("%d%d%d", &n, &a,&b);
    scanf("%s", s+1);
    memset(id,-1,sizeof id);
    REQ(i,n) c[i]=gid(s[i]);
    REP(i,1<<cnt) L[i]=inf;
    REQ(i,n) {
        int num=1<<c[i]; Ct[num]++;
        mintt(L[num], i);
        R[num]=i;
    }
    REP(i, 1<<cnt) if(__builtin_popcount(i)>1){
        REP(j,cnt) if (i&(1<<j)) {
            mintt(L[i], L[1<<j]);
            maxtt(R[i], R[1<<j]);
            Ct[i]+=Ct[1<<j];
        }
    }
    dp[0]=1;
    for(int sta=1;sta<(1<<cnt);sta++) {
        REP(j,cnt) if (sta&(1<<j)){
            if ((R[sta]-L[sta]+1)*a <= Ct[sta]*b) {
                if (dp[sta^(1<<j)]) {
                    dp[sta]=1; break;}
            }
        }
        if(dp[sta]) continue;
        for(int z=cnt-1;z>0;z--) {
            int B=sta & ((1<<z)-1);
            int A=sta-B;
            if (dp[A] && dp[B]) {
                dp[sta]=1; break;
            }
        }
    }
    int all=(1<<cnt)-1;
    vector<char> ans;
    REP(j, cnt) if(dp[all^(1<<j)]) ans.push_back(rid[j]);
    printf("%d ", (int)ans.size());
    sort(ans.begin(), ans.end());
    for(char z: ans) printf("%c ", z); puts("");
}
int main() {
    int t=1;
//    scanf("%d", &t);
//    init();
    REQ(i,t) {
        fmain(i);
    }
    return 0;
}