//递归实现基本的排序,字典序通过事先调用sort()函数解决,重复字符通过添加重复判断解决
#include <string>
#include <vector>
#include <algorithm>
#include<iostream>
#include <stdio.h>
using
namespace
std;
void
Permute(string soFar,string rest)
{
string pre;
//前一个字符,用于判断字符重复
pre=
""
;
if
(rest==
""
)
{
//cout<<soFar<<endl;
printf
(
"%s\n"
,soFar.c_str());
}
else
{
for
(
int
i=0;i<rest.length();i++)
{
string now;
now.insert(now.begin(),rest[i]);
if
(now==pre)
continue
;
pre=rest[i];
string next=soFar+rest[i];
string remaining=rest.substr(0,i)+rest.substr(i+1);
Permute(next,remaining);
}
}
}
void
ListPermutaions(string s)
{
Permute(
""
,s);
}
int
main()
{
string p;
while
(cin>>p){
sort(p.begin(),p.end());
ListPermutaions(p);
}
return
0;
}
/**************************************************************
Problem: 1369
User: 无梦楼主lv
Language: C++
Result: Accepted
Time:830 ms
Memory:1524 kb
****************************************