vector<vector<int>> pwSet{vector<int>()};
vector<vector<int>> arrage{vector<int>{1}};
void getSet (int n) {
vector<vector<int>> tempPwSet;
for (int i = 1; i <= n; ++i) {
tempPwSet = pwSet;
for (auto itor = tempPwSet.begin();
itor != tempPwSet.end(); ++itor) {
itor->push_back(i);
pwSet.push_back(*itor);
}
}
}
void print_pwSet () {
for (auto vec : pwSet) {
cout << "{ ";
for (auto val : vec)
cout << val << " ";
cout << "}" << endl;
}
}
void print_arrage () {
for (auto vec : arrage) {
cout << "{ ";
for (auto val : vec)
cout << val << " ";
cout << "}" << endl;
}
}
void insert (vector<int> vec, int num, vector<vector<int>> &vvec)
{
for (int i = 0; i < num; ++i) {
auto tempVec = vec;
auto itor = tempVec.begin() + i;
tempVec.insert(itor, num);
vvec.push_back(tempVec);
}
}
void getArrage (int n) {
vector<vector<int>> tempArrage;
for (int i = 2; i <= n; ++i) {
tempArrage.clear();
for (auto itor = arrage.begin(); itor != arrage.end(); ++itor)
insert(*itor, i, tempArrage);
arrage = tempArrage;
}
}
void insert2 (int i) {
vector<vector<int>> tempPwSet(pwSet);
for (auto itor = tempPwSet.begin(); itor != tempPwSet.end(); ++itor) {
itor->push_back(i);
pwSet.push_back(*itor);
}
}
void getSet2(int i, int n) {
if (i <= n) {
insert2(i);
getSet2(i+1, n);
}
}
void getArrage2 (int i, int n) {
if (i <= n) {
vector<vector<int>> tempArrage;
for (auto itor = arrage.begin();
itor != arrage.end(); ++itor)
insert(*itor, i, tempArrage);
arrage = tempArrage;
getArrage2(i+1, n);
}
}