import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Anagram {
static int size;//变位字有的总字符个数
static int count;//变位字变化之后共有多少个
static char[] arrChar=new char[100];
public static void main(String[] args) throws IOException {
System.out.print("输入 一个word:");
String word=getString();
size=word.length();
count=0;
for(int j=0;j<size;j++) {
arrChar[j]=word.charAt(j);//将字符串转换为数组
}
doAnagram(size);
}
private static void doAnagram(int newSize) {
if(newSize==1)
return;
for(int j=0;j<newSize;j++) {
if(newSize==2)
displayWord();//打印(当只剩下两个数时,就可以打印数组)
doAnagram(newSize-1);//先让数据量为n-1的下标为n-1以后的数组变位
rotate(newSize);//转动当前数组(就是将数组中的每一个往前移动一位,第一个就移动到最后一个位置)
}
}
/*
* 2345
* 第一层 第二层 第三层
* 2 3 4
* 5
* 4 5
* 3
* 5 3
* 4
* 3 4 5
* 2
* 5 2
* 4
* 2 4
* 5
* 4 5 2
* 3
* 2 3
* 5
* 3 5
* 2
* 5 2 3
* 4
* 3 4
* 2
* 4 2
* 3
*
*
*
*
*
*
*
*/
private static void rotate(int newSize) {
int j;
int position=size-newSize;//需要转动的位置
//转动一次
char temp=arrChar[position];
for(j=position+1;j<size;j++) {
arrChar[j-1]=arrChar[j];
}
arrChar[j-1]=temp;
}
private static void displayWord() {
if(count<99)
System.out.print(" ");
if(count<9)
System.out.print(" ");//当count的数值为一位数,两位数,三位数时,输出都会影响排版,所以需要在一位数的count前面加上一个空格,两位数前面加上一个空格。最后数据显示的都在同一条线上
System.out.print(++count+" ");
for(int j=0;j<size;j++)
System.out.print(arrChar[j]);
System.out.print(" ");
System.out.flush();
if(count%6==0)
System.out.println();
}
public static String getString() throws IOException {
InputStreamReader inputStreamReader=new InputStreamReader(System.in);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
return bufferedReader.readLine();
}
}