class Solution {
public:
vector<string> res;
void dfs(vector<char> data, bool visited[], string list) {
if (list.size() == data.size()){
res.push_back(list);
return;
}
for(int i = 0; i < data.size(); i++){
if(visited[i] || i > 0 && data[i] == data[i-1] && !visited[i-1])
continue;
visited[i] = true;
list += data[i];
dfs(data,visited,list);
list = list.substr(0,list.size()-1);
visited[i] = false;
}
}
vector<string> Permutation(string str) {
vector<char> data;
for (int i = 0; i < str.size(); i++) {
data.push_back(str[i]);
}
sort(data.begin(),data.end());
bool visited[11] = {0};
string list;
dfs(data, visited, list);
return res;
}
};