import java.util.*; public class Main { public static void main(String[] args) { Scanner in =new Scanner(System.in); int t =in.nextInt(); for(int i =0;i<t;i++) { String n=in.next(); char[] max = n.toCharArray(); char[] min = n.toCharArray(); int k =in.nextInt(); System.out.println(getmin(min,0,k)+" "+getmax(max,0,k)); } } public static String getmin(char[] num,int loc,int k) { if(k==1) { int minloc = loc; for(int i =num.length-1;i>=loc;i--) { if(num[minloc]>num[i]) { minloc=i; } } if(minloc == loc) { if(loc+1==num.length) { StringBuffer sb=new StringBuffer(); return sb.append(num).toString(); } return getmin(num,loc+1,k); } char temp = num[loc]; num[loc]=num[minloc]; num[minloc]=temp; StringBuffer sb=new StringBuffer(); return sb.append(num).toString(); }else { ArrayList<Integer> allminloc = new ArrayList<Integer>(); int minloc = loc; for(int i =num.length-1;i>=loc;i--) { if(num[minloc]>num[i]) { minloc=i; } } if(minloc == loc) { if(loc+1==num.length) { StringBuffer sb=new StringBuffer(); return sb.append(num).toString(); } return getmin(num,loc+1,k); }else { for(int i =num.length-1;i>=loc;i--) { if(num[minloc]==num[i]) { allminloc.add(i); } } StringBuffer sb=new StringBuffer(); String minnum=sb.append(num).toString(); char[] copy = num.clone(); for(int i :allminloc) { char temp = num[loc]; num[loc]=num[i]; num[i]=temp; String newnum=getmin(num,loc+1,k-1); if(minnum.compareTo(newnum)>0) { minnum=newnum; } num=copy.clone(); } return minnum; } } } public static String getmax(char[] num,int loc,int k) { if(k==1) { int maxloc = loc; for(int i =num.length-1;i>=loc;i--) { if(num[maxloc]<num[i]) { maxloc=i; } } if(maxloc == loc) { if(loc+1==num.length) { StringBuffer sb=new StringBuffer(); return sb.append(num).toString(); } return getmax(num,loc+1,k); } char temp = num[loc]; num[loc]=num[maxloc]; num[maxloc]=temp; StringBuffer sb=new StringBuffer(); return sb.append(num).toString(); }else { ArrayList<Integer> allmaxloc = new ArrayList<Integer>(); int maxloc = loc; for(int i =num.length-1;i>=loc;i--) { if(num[maxloc]<num[i]) { maxloc=i; } } if(maxloc == loc) { if(loc+1==num.length) { StringBuffer sb=new StringBuffer(); return sb.append(num).toString(); } return getmax(num,loc+1,k); }else { for(int i =num.length-1;i>=loc;i--) { if(num[maxloc]==num[i]) { allmaxloc.add(i); } } StringBuffer sb=new StringBuffer(); String maxnum=sb.append(num).toString(); char[] copy = num.clone(); for(int i :allmaxloc) { char temp = num[loc]; num[loc]=num[i]; num[i]=temp; String newnum=getmax(num,loc+1,k-1); if(maxnum.compareTo(newnum)<0) { maxnum=newnum; } num=copy.clone(); } return maxnum; } } } } |
Double click to view unformatted code.