import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Hashtable;
import java.util.List;
public class Main {
public static void main(String[] args) {
long a=System.currentTimeMillis();
String s="11234445678";
char[] arr=s.toCharArray();
Arrays.sort(arr);
List<String> result=new ArrayList<String>();
result.add(String.valueOf(arr));
while(lowPos(arr)!=-1){
int i=lowPos(arr);
int j=minInMaxThanPos(arr, i);
swap(arr, i, j);
reverseAfterI(arr, i);
result.add(String.valueOf(arr));
}
System.out.println(result.size());
long b=System.currentTimeMillis();
System.out.println("用时:"+String.valueOf(b-a));
}
public static int lowPos(char[] arr){
int i;
for(i=arr.length-1;i>=1;i--)
if(arr[i-1]<arr[i])
break;
return i-1;
}
public static int minInMaxThanPos(char[] arr,int index){
Hashtable< Character,Integer> ht=new Hashtable< Character,Integer>();
ArrayList<Character> tmp =new ArrayList<Character>();
int j=0;
for(int i=index+1;i<arr.length;i++)
if(arr[i]>arr[index])
{
ht.put(arr[i],i);
tmp.add(arr[i]);
}
if( ht.isEmpty())
return -1;
Collections.sort(tmp);
return ht.get(tmp.get(0));
}
public static void swap(char[] arr,int i,int j){
char tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
public static void reverseAfterI(char[] arr,int index){
int j=arr.length-1;
int len=arr.length-1-(index+1)+1;
for(int i=index+1;i<=index+len/2;i++)
swap(arr,i,j--);
}
}