Beautiful Now
题目传送门
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <algorithm>
#include <functional>
#define inf 1000000000
using namespace std;
typedef long long ll;
const int MAXN=1e9+10;
const int MAX=1e3+10;
const double eps=1e-6;
const double PI=3.14159;
char str[15];
int len,k;
int num[20];
int vis[20];
std::vector<int> per[10][10];
void init(){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;
num[j]=j;
do{
memset(vis,0,sizeof(vis));
int num_t=0,cnt=0;
for(int j=1;j<=i;j++)
num_t=num_t*10+num[j];
for(int j=1;j<=i;j++){
if(vis[j]!=num_t){
for(int k=num[j];k!=j;k=num[k]){
vis[k]=num_t;
cnt++;
}
}
}
per[i][cnt].push_back(num_t);
}
while(next_permutation(num + 1, num + i + 1));
}
}
int get(int number){
int res=0;
int temp=1;
while(number){
res+=temp*num[number%10];
number/=10;
temp*=10;
}
return res;
}
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("in.txt","r",stdin);
#endif
int T;
cin>>T;
init();
while(T--){
scanf("%s%d",str,&k);
len=strlen(str);
if(len==10){
cout<<1000000000<<" "<<1000000000<<endl;
continue;
}
for(int i=0;i<len;i++)
num[i+1]=str[i]-'0';
if(k>=len)
k=len-1;
int maxx=0;
int minn=1000000000;
int res=1;
for(int i=1;i<len;i++)
res=res*10;
for(int i=0;i<=k;i++){
for(std::vector<int>::iterator it=per[len][i].begin();it!=per[len][i].end();it++){
int num_t=get(*it);
if(num_t<res) continue;
maxx=max(maxx,num_t);
minn=min(minn,num_t);
}
}
cout<<minn<<" "<<maxx<<endl;
}
return 0;
}