疯了,自己测的小样例都能过
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f3f3f3f3f
#define pr printf("\n")
#define pp printf(" ")
#define pii pair<ll,ll>
#define mem(aa,bb) memset(aa,bb,sizeof(aa))
#define fo(a,i,b) for(ll i = a ; i <= b ; i ++ )
#define Fo(a,i,b) for(ll i = a ; i >= b ;-- i )
using namespace std;
typedef int ll;
typedef double db;
const int N=1e7+5;
inline void read(ll &opp){ll x=0,t=1;char ch;ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-'){t=-1;}ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}opp=x*t;return; }
inline void wr(ll x){if(x<0){putchar('-');x=-x;}if(x>9){wr(x/10);}putchar(x%10+'0');}
ll t,n,k,m;
string s,ss;
ll mp[30];
int main(){
read(t);
while(t--){
read(n),read(k),read(m);
s=ss;
cin>>s;
mem(mp,0);
ll sum=0,start=0,m1=m;
fo(1,i,k) s+=char('a'+i-1);
m+=k;
fo(0,i,m-1)
{
if(!mp[s[i]-'a'+1])
{
mp[s[i]-'a'+1]=1;
sum++;
}
if(sum==k){start=i;break;}
}
string s2;
s2+=s[start];
if(start>m1-1)
{
printf("NO\n");
fo(1,i,n) cout<<s[start];
if(t) pr;
continue;
}
ll now=1,flag=0;
sum=0;mem(mp,0);
// cout<<s;pr;
fo(start,i,m-1){
if(now==n){
printf("YES");
break;
}
if(i>m1-1&&!mp[s[i]-'a'+1]){
// wr(i);pr;
// wr(n-s2.size());pr;
flag=1;
printf("NO\n");
cout<<s2;
fo(1,j,n-s2.size()) cout<<s[i];
break;
}
if(!mp[s[i]-'a'+1]) mp[s[i]-'a'+1]=1,sum++;
if(sum==k) now++,mem(mp,0),s2+=s[i],sum=0;
}
if(t) pr;
}
return 0;
}