#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MOD 1000000007
ll i,j,k,l,n,m,arr[1000005],vis[1000005];
struct node
{
int ch;
int pos;
}seg[10000005],seg1[10000005];
void init(int st,int end,int p)
{
int mid;
if(st==end)
{
seg[p].ch=INT_MAX;
seg[p].pos=-1;
}
else
{
mid=st+(end-st)/2;
init(st,mid,2*p);
init(mid+1,end,2*p+1);
seg[p].ch=INT_MAX;
seg[p].pos=-1;
}
}
pair<int,int> query(int beg,int end,int i,int j,int p)
{
int mid;
pair<int,int>l1;
pair<int,int>l2;
if(i>end || j<beg)
return make_pair(INT_MAX,0);
if(beg>=i && end<=j)
return make_pair(seg[p].ch,seg[p].pos);
mid=beg+(end-beg)/2;
l1=query(beg,mid,i,j,2*p);
l2=query(mid+1,end,i,j,2*p+1);
if(l1.first<l2.first)
return l1;
else if(l1.first==l2.first && l1.second>l2.second)
return l1;
else
return l2;
}
void update(int beg,int end,int i,int j,pair<int,int> value,int p)
{
if(i>end || j<beg)
return;
if(beg>=i && end<=j)
{
seg[p].ch=value.first;
seg[p].pos=value.second;
return;
}
int mid=beg+(end-beg)/2;
update(beg,mid,i,j,value,2*p);
update(mid+1,end,i,j,value,2*p+1);
pair<int,int>l1=make_pair(seg[2*p].ch,seg[2*p].pos);
pair<int,int>l2=make_pair(seg[2*p+1].ch,seg[2*p+1].pos);
if(l1.first<l2.first)
{
seg[p].ch=l1.first;
seg[p].pos=l1.second;
}
else if(l1.first==l2.first && l1.second>l2.second)
{
seg[p].ch=l1.first;
seg[p].pos=l1.second;
}
else
{
seg[p].ch=l2.first;
seg[p].pos=l2.second;
}
}
void init1(int st,int end,int p)
{
int mid;
if(st==end)
{
seg1[p].ch=INT_MAX;
seg1[p].pos=-1;
}
else
{
mid=st+(end-st)/2;
init1(st,mid,2*p);
init1(mid+1,end,2*p+1);
seg1[p].ch=INT_MAX;
seg1[p].pos=-1;
}
}
pair<int,int> query1(int beg,int end,int i,int j,int p)
{
int mid;
pair<int,int>l1;
pair<int,int>l2;
if(i>end || j<beg)
return make_pair(INT_MAX,0);
if(beg>=i && end<=j)
return make_pair(seg1[p].ch,seg1[p].pos);
mid=beg+(end-beg)/2;
l1=query1(beg,mid,i,j,2*p);
l2=query1(mid+1,end,i,j,2*p+1);
if(l1.first<l2.first)
return l1;
else if(l1.first==l2.first && l1.second>l2.second)
return l1;
else
return l2;
}
void update1(int beg,int end,int i,int j,pair<int,int> value,int p)
{
if(i>end || j<beg)
return;
if(beg>=i && end<=j)
{
seg1[p].ch=value.first;
seg1[p].pos=value.second;
return;
}
int mid=beg+(end-beg)/2;
update1(beg,mid,i,j,value,2*p);
update1(mid+1,end,i,j,value,2*p+1);
pair<int,int>l1=make_pair(seg1[2*p].ch,seg1[2*p].pos);
pair<int,int>l2=make_pair(seg1[2*p+1].ch,seg1[2*p+1].pos);
if(l1.first<l2.first)
{
seg1[p].ch=l1.first;
seg1[p].pos=l1.second;
}
else if(l1.first==l2.first && l1.second>l2.second)
{
seg1[p].ch=l1.first;
seg1[p].pos=l1.second;
}
else
{
seg1[p].ch=l2.first;
seg1[p].pos=l2.second;
}
}
int main()
{
string str;
cin>>n>>k>>str;
l=str.size();
init(1,l,1);
init1(1,l,1);
for(i=0;i<l;i++)
update(1,l,i+1,i+1,make_pair(int(str[i])-96,i+1),1);
for(i=0;i<l;i++)
{
pair<int,int>p1=query(1,l,i+2,l,1);
int yu=int(str[i])-96;
int lp=0;
if(vis[i]==0)
lp+=1;
if(vis[p1.second-1]==0)
lp+=1;
if((k>=2 && p1.first<yu) || (k==1 && (lp==1 || lp==0) && p1.first<yu) || (lp==0 && p1.first<yu))
{
k-=lp;
vis[i]=1;
vis[p1.second-1]=1;
char yo=str[i];
str[i]=str[p1.second-1];
str[p1.second-1]=yo;
update(1,l,i+1,i+1,make_pair(int(str[i])-96,i+1),1);
update(1,l,p1.second,p1.second,make_pair(int(str[p1.second-1])-96,p1.second),1);
update1(1,l,i+1,i+1,make_pair(int(str[i])-96,i+1),1);
update1(1,l,p1.second,p1.second,make_pair(int(str[p1.second-1])-96,p1.second),1);
}
else if(k==1 && lp==2)
{
pair<int,int>p1=query1(1,l,i+2,l,1);
int yu=int(str[i])-96;
if(p1.first<yu)
{
k=0;
vis[i]=1;
vis[p1.second-1]=1;
char yo=str[i];
str[i]=str[p1.second-1];
str[p1.second-1]=yo;
update(1,l,i+1,i+1,make_pair(int(str[i])-96,i+1),1);
update(1,l,p1.second,p1.second,make_pair(int(str[p1.second-1])-96,p1.second),1);
update1(1,l,i+1,i+1,make_pair(int(str[i])-96,i+1),1);
update1(1,l,p1.second,p1.second,make_pair(int(str[p1.second-1])-96,p1.second),1);
}
}
}
vector<int>v1;
vector<char>v2;
for(i=0;i<l;i++)
{
cout<<vis[i]<<" ";
if(vis[i]==0)
continue;
v1.push_back(i);
v2.push_back((str[i]));
}
sort(v2.begin(),v2.end());
for(i=0;i<v1.size();i++)
str[v1[i]]=v2[i];
cout<<str;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nIAojZGVmaW5lIE1PRCAxMDAwMDAwMDA3IApsbCBpLGosayxsLG4sbSxhcnJbMTAwMDAwNV0sdmlzWzEwMDAwMDVdOwpzdHJ1Y3Qgbm9kZQp7CglpbnQgY2g7CglpbnQgcG9zOwp9c2VnWzEwMDAwMDA1XSxzZWcxWzEwMDAwMDA1XTsKdm9pZCBpbml0KGludCBzdCxpbnQgZW5kLGludCBwKQp7CglpbnQgbWlkOwoJaWYoc3Q9PWVuZCkKCXsKCQlzZWdbcF0uY2g9SU5UX01BWDsKCQlzZWdbcF0ucG9zPS0xOwoJfQoJZWxzZQoJewoJCW1pZD1zdCsoZW5kLXN0KS8yOwoJCWluaXQoc3QsbWlkLDIqcCk7CgkJaW5pdChtaWQrMSxlbmQsMipwKzEpOwoJCXNlZ1twXS5jaD1JTlRfTUFYOwoJCXNlZ1twXS5wb3M9LTE7Cgl9Cn0KcGFpcjxpbnQsaW50PiBxdWVyeShpbnQgYmVnLGludCBlbmQsaW50IGksaW50IGosaW50IHApCnsKCWludCBtaWQ7CglwYWlyPGludCxpbnQ+bDE7CglwYWlyPGludCxpbnQ+bDI7CglpZihpPmVuZCB8fCBqPGJlZykKCQlyZXR1cm4gbWFrZV9wYWlyKElOVF9NQVgsMCk7CglpZihiZWc+PWkgJiYgZW5kPD1qKQoJCXJldHVybiBtYWtlX3BhaXIoc2VnW3BdLmNoLHNlZ1twXS5wb3MpOwoJbWlkPWJlZysoZW5kLWJlZykvMjsKCWwxPXF1ZXJ5KGJlZyxtaWQsaSxqLDIqcCk7CglsMj1xdWVyeShtaWQrMSxlbmQsaSxqLDIqcCsxKTsKCWlmKGwxLmZpcnN0PGwyLmZpcnN0KQoJCXJldHVybiBsMTsKCWVsc2UgaWYobDEuZmlyc3Q9PWwyLmZpcnN0ICYmIGwxLnNlY29uZD5sMi5zZWNvbmQpCgkJcmV0dXJuIGwxOwoJZWxzZQoJCXJldHVybiBsMjsKfQp2b2lkIHVwZGF0ZShpbnQgYmVnLGludCBlbmQsaW50IGksaW50IGoscGFpcjxpbnQsaW50PiB2YWx1ZSxpbnQgcCkKewoJaWYoaT5lbmQgfHwgajxiZWcpCgkJcmV0dXJuOwoJaWYoYmVnPj1pICYmIGVuZDw9aikKCXsKCQlzZWdbcF0uY2g9dmFsdWUuZmlyc3Q7CgkJc2VnW3BdLnBvcz12YWx1ZS5zZWNvbmQ7CgkJcmV0dXJuOwoJfQoJaW50IG1pZD1iZWcrKGVuZC1iZWcpLzI7Cgl1cGRhdGUoYmVnLG1pZCxpLGosdmFsdWUsMipwKTsKCXVwZGF0ZShtaWQrMSxlbmQsaSxqLHZhbHVlLDIqcCsxKTsKCXBhaXI8aW50LGludD5sMT1tYWtlX3BhaXIoc2VnWzIqcF0uY2gsc2VnWzIqcF0ucG9zKTsKCXBhaXI8aW50LGludD5sMj1tYWtlX3BhaXIoc2VnWzIqcCsxXS5jaCxzZWdbMipwKzFdLnBvcyk7CglpZihsMS5maXJzdDxsMi5maXJzdCkKCXsKCQlzZWdbcF0uY2g9bDEuZmlyc3Q7CgkJc2VnW3BdLnBvcz1sMS5zZWNvbmQ7Cgl9CgllbHNlIGlmKGwxLmZpcnN0PT1sMi5maXJzdCAmJiBsMS5zZWNvbmQ+bDIuc2Vjb25kKQoJewoJCXNlZ1twXS5jaD1sMS5maXJzdDsKCQlzZWdbcF0ucG9zPWwxLnNlY29uZDsKCX0KCWVsc2UKCXsKCQlzZWdbcF0uY2g9bDIuZmlyc3Q7CgkJc2VnW3BdLnBvcz1sMi5zZWNvbmQ7Cgl9Cn0Kdm9pZCBpbml0MShpbnQgc3QsaW50IGVuZCxpbnQgcCkKewoJaW50IG1pZDsKCWlmKHN0PT1lbmQpCgl7CgkJc2VnMVtwXS5jaD1JTlRfTUFYOwoJCXNlZzFbcF0ucG9zPS0xOwoJfQoJZWxzZQoJewoJCW1pZD1zdCsoZW5kLXN0KS8yOwoJCWluaXQxKHN0LG1pZCwyKnApOwoJCWluaXQxKG1pZCsxLGVuZCwyKnArMSk7CgkJc2VnMVtwXS5jaD1JTlRfTUFYOwoJCXNlZzFbcF0ucG9zPS0xOwoJfQp9CnBhaXI8aW50LGludD4gcXVlcnkxKGludCBiZWcsaW50IGVuZCxpbnQgaSxpbnQgaixpbnQgcCkKewoJaW50IG1pZDsKCXBhaXI8aW50LGludD5sMTsKCXBhaXI8aW50LGludD5sMjsKCWlmKGk+ZW5kIHx8IGo8YmVnKQoJCXJldHVybiBtYWtlX3BhaXIoSU5UX01BWCwwKTsKCWlmKGJlZz49aSAmJiBlbmQ8PWopCgkJcmV0dXJuIG1ha2VfcGFpcihzZWcxW3BdLmNoLHNlZzFbcF0ucG9zKTsKCW1pZD1iZWcrKGVuZC1iZWcpLzI7CglsMT1xdWVyeTEoYmVnLG1pZCxpLGosMipwKTsKCWwyPXF1ZXJ5MShtaWQrMSxlbmQsaSxqLDIqcCsxKTsKCWlmKGwxLmZpcnN0PGwyLmZpcnN0KQoJCXJldHVybiBsMTsKCWVsc2UgaWYobDEuZmlyc3Q9PWwyLmZpcnN0ICYmIGwxLnNlY29uZD5sMi5zZWNvbmQpCgkJcmV0dXJuIGwxOwoJZWxzZQoJCXJldHVybiBsMjsKfQp2b2lkIHVwZGF0ZTEoaW50IGJlZyxpbnQgZW5kLGludCBpLGludCBqLHBhaXI8aW50LGludD4gdmFsdWUsaW50IHApCnsKCWlmKGk+ZW5kIHx8IGo8YmVnKQoJCXJldHVybjsKCWlmKGJlZz49aSAmJiBlbmQ8PWopCgl7CgkJc2VnMVtwXS5jaD12YWx1ZS5maXJzdDsKCQlzZWcxW3BdLnBvcz12YWx1ZS5zZWNvbmQ7CgkJcmV0dXJuOwoJfQoJaW50IG1pZD1iZWcrKGVuZC1iZWcpLzI7Cgl1cGRhdGUxKGJlZyxtaWQsaSxqLHZhbHVlLDIqcCk7Cgl1cGRhdGUxKG1pZCsxLGVuZCxpLGosdmFsdWUsMipwKzEpOwoJcGFpcjxpbnQsaW50PmwxPW1ha2VfcGFpcihzZWcxWzIqcF0uY2gsc2VnMVsyKnBdLnBvcyk7CglwYWlyPGludCxpbnQ+bDI9bWFrZV9wYWlyKHNlZzFbMipwKzFdLmNoLHNlZzFbMipwKzFdLnBvcyk7CglpZihsMS5maXJzdDxsMi5maXJzdCkKCXsKCQlzZWcxW3BdLmNoPWwxLmZpcnN0OwoJCXNlZzFbcF0ucG9zPWwxLnNlY29uZDsKCX0KCWVsc2UgaWYobDEuZmlyc3Q9PWwyLmZpcnN0ICYmIGwxLnNlY29uZD5sMi5zZWNvbmQpCgl7CgkJc2VnMVtwXS5jaD1sMS5maXJzdDsKCQlzZWcxW3BdLnBvcz1sMS5zZWNvbmQ7Cgl9CgllbHNlCgl7CgkJc2VnMVtwXS5jaD1sMi5maXJzdDsKCQlzZWcxW3BdLnBvcz1sMi5zZWNvbmQ7Cgl9Cn0KaW50IG1haW4oKSAKewoJc3RyaW5nIHN0cjsKCWNpbj4+bj4+az4+c3RyOwoJbD1zdHIuc2l6ZSgpOwoJaW5pdCgxLGwsMSk7Cglpbml0MSgxLGwsMSk7Cglmb3IoaT0wO2k8bDtpKyspCgkJdXBkYXRlKDEsbCxpKzEsaSsxLG1ha2VfcGFpcihpbnQoc3RyW2ldKS05NixpKzEpLDEpOwoJZm9yKGk9MDtpPGw7aSsrKQoJewoJCXBhaXI8aW50LGludD5wMT1xdWVyeSgxLGwsaSsyLGwsMSk7CgkJaW50IHl1PWludChzdHJbaV0pLTk2OwoJCWludCBscD0wOwoJCWlmKHZpc1tpXT09MCkKCQkJbHArPTE7CgkJaWYodmlzW3AxLnNlY29uZC0xXT09MCkKCQkJbHArPTE7CgkJaWYoKGs+PTIgJiYgcDEuZmlyc3Q8eXUpIHx8IChrPT0xICYmIChscD09MSB8fCBscD09MCkgJiYgcDEuZmlyc3Q8eXUpIHx8IChscD09MCAmJiBwMS5maXJzdDx5dSkpCgkJewoJCQlrLT1scDsKCQkJdmlzW2ldPTE7CgkJCXZpc1twMS5zZWNvbmQtMV09MTsKCQkJY2hhciB5bz1zdHJbaV07CgkJCXN0cltpXT1zdHJbcDEuc2Vjb25kLTFdOwoJCQlzdHJbcDEuc2Vjb25kLTFdPXlvOwoJCQl1cGRhdGUoMSxsLGkrMSxpKzEsbWFrZV9wYWlyKGludChzdHJbaV0pLTk2LGkrMSksMSk7CgkJCXVwZGF0ZSgxLGwscDEuc2Vjb25kLHAxLnNlY29uZCxtYWtlX3BhaXIoaW50KHN0cltwMS5zZWNvbmQtMV0pLTk2LHAxLnNlY29uZCksMSk7CgkJCXVwZGF0ZTEoMSxsLGkrMSxpKzEsbWFrZV9wYWlyKGludChzdHJbaV0pLTk2LGkrMSksMSk7CgkJCXVwZGF0ZTEoMSxsLHAxLnNlY29uZCxwMS5zZWNvbmQsbWFrZV9wYWlyKGludChzdHJbcDEuc2Vjb25kLTFdKS05NixwMS5zZWNvbmQpLDEpOwoJCX0KCQllbHNlIGlmKGs9PTEgJiYgbHA9PTIpCgkJewoJCQlwYWlyPGludCxpbnQ+cDE9cXVlcnkxKDEsbCxpKzIsbCwxKTsKCQkJaW50IHl1PWludChzdHJbaV0pLTk2OwoJCQlpZihwMS5maXJzdDx5dSkKCQkJewoJCQkJaz0wOwoJCQkJdmlzW2ldPTE7CgkJCQl2aXNbcDEuc2Vjb25kLTFdPTE7CgkJCQljaGFyIHlvPXN0cltpXTsKCQkJCXN0cltpXT1zdHJbcDEuc2Vjb25kLTFdOwoJCQkJc3RyW3AxLnNlY29uZC0xXT15bzsKCQkJCXVwZGF0ZSgxLGwsaSsxLGkrMSxtYWtlX3BhaXIoaW50KHN0cltpXSktOTYsaSsxKSwxKTsKCQkJCXVwZGF0ZSgxLGwscDEuc2Vjb25kLHAxLnNlY29uZCxtYWtlX3BhaXIoaW50KHN0cltwMS5zZWNvbmQtMV0pLTk2LHAxLnNlY29uZCksMSk7CgkJCQl1cGRhdGUxKDEsbCxpKzEsaSsxLG1ha2VfcGFpcihpbnQoc3RyW2ldKS05NixpKzEpLDEpOwoJCQkJdXBkYXRlMSgxLGwscDEuc2Vjb25kLHAxLnNlY29uZCxtYWtlX3BhaXIoaW50KHN0cltwMS5zZWNvbmQtMV0pLTk2LHAxLnNlY29uZCksMSk7CgkJCX0KCQl9Cgl9Cgl2ZWN0b3I8aW50PnYxOwoJdmVjdG9yPGNoYXI+djI7Cglmb3IoaT0wO2k8bDtpKyspCgl7CgkJY291dDw8dmlzW2ldPDwiICI7CgkJaWYodmlzW2ldPT0wKQoJCQljb250aW51ZTsKCQl2MS5wdXNoX2JhY2soaSk7CgkJdjIucHVzaF9iYWNrKChzdHJbaV0pKTsKCX0KCXNvcnQodjIuYmVnaW4oKSx2Mi5lbmQoKSk7Cglmb3IoaT0wO2k8djEuc2l6ZSgpO2krKykKCQlzdHJbdjFbaV1dPXYyW2ldOwoJY291dDw8c3RyOwoJcmV0dXJuIDA7Cn0=