Description:
Accept:
#include<bits/stdc++.h>
using namespace std;
int n, l = 0;
vector<int>record;
struct Node {
int value;
int cnt;
Node() {
value = 0;
cnt = 0;
}
Node(int valuee, int tt) {
value = valuee;
cnt = tt;
}
};
Node v[10];
map<int, int>m;
void dfs(int cur) {
if (cur == l) {
for (int i = 0; i < record.size(); i++) {
printf(" %d" + !i, record[i]);
}
printf("\n");
}
for (int i = 0; i < l; i++) {
if (v[i].cnt == 0) {
continue;
}
v[i].cnt--;
record.push_back(v[i].value);
if (v[i].cnt == 0) {
dfs(cur + 1);
}
else {
dfs(cur);
}
record.pop_back();
v[i].cnt++;
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++) {
int tmp;
cin >> tmp;
m[tmp]++;
}
for (auto it = m.begin(); it != m.end(); it++) {
v[l].value = it->first;
v[l++].cnt = it->second;
}
dfs(0);
return 0;
}