#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <sstream>
#include <bits/stdc++.h>
#include <string>
#include <string.h>
#include <vector>
#include <sstream>
#include <stdio.h>
#include <time.h>
#include <algorithm>
#include <iterator>
using namespace std;
void printvector(vector<vector<int>> v){
for(int i=0;i<v.size();i++)
{
for(int j=0;j<v[i].size();j++)
{
cout<<v[i][j]<<" ";
}
cout << endl;
}
}
void dfs(int layer,int time,vector<int> &arrangement,bool* visited,vector<int> candidate,vector<vector<int>> &path){
if (layer == time){
/*for (int i = 0; i < time; i++){
cout << arrangement[i] << "\t";
}
cout << endl;
*/
path.push_back(arrangement);
//for(int i=0; i<path.size(); i++) cout << path.at(i) << " ";
return;
}
for (int i = 0; i < time; i++){
if (visited[i]){
continue;
}
visited[i] = true;
arrangement.resize(layer+1);
arrangement.at(layer) = candidate[i];
dfs(layer + 1,time,arrangement,visited,candidate,path);
visited[i] = false;
}
}
//窮舉
vector<vector<int>> generate_path(vector<int> candidate,int time){
vector<vector<int>>path;
bool visited[time] = {false};
vector<int> arrangement;
dfs(0,time,arrangement,visited,candidate,path);
return path;
//path.push_back(dfs(0,time,arrangement,visited,candidate));
//for(int i=0; i<path.size(); i++) cout << path.at(i) << " ";
}
int main()
{
vector<int> candidate;
candidate.push_back(10105);
candidate.push_back(10732);
candidate.push_back(10865);
//vector<vector<int>>path;
vector<vector<int>>v;
v=generate_path(candidate,3);
printvector(v);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogCnZvaWQgcHJpbnR2ZWN0b3IodmVjdG9yPHZlY3RvcjxpbnQ+PiB2KXsKICAgIGZvcihpbnQgaT0wO2k8di5zaXplKCk7aSsrKSAgICAgICAKICAgIHsKICAgICAgICBmb3IoaW50IGo9MDtqPHZbaV0uc2l6ZSgpO2orKykKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQ8PHZbaV1bal08PCIgIjsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgfQp9CiAKdm9pZCBkZnMoaW50IGxheWVyLGludCB0aW1lLHZlY3RvcjxpbnQ+ICZhcnJhbmdlbWVudCxib29sKiB2aXNpdGVkLHZlY3RvcjxpbnQ+IGNhbmRpZGF0ZSx2ZWN0b3I8dmVjdG9yPGludD4+ICZwYXRoKXsKICAgIGlmIChsYXllciA9PSB0aW1lKXsKICAgICAgICAvKmZvciAoaW50IGkgPSAwOyBpIDwgdGltZTsgaSsrKXsKICAgICAgICAgICAgY291dCA8PCBhcnJhbmdlbWVudFtpXSA8PCAiXHQiOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICAgICAgKi8KICAgICAgICBwYXRoLnB1c2hfYmFjayhhcnJhbmdlbWVudCk7CiAgICAgICAgLy9mb3IoaW50IGk9MDsgaTxwYXRoLnNpemUoKTsgaSsrKSBjb3V0IDw8IHBhdGguYXQoaSkgPDwgIiAiOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGltZTsgaSsrKXsKICAgICAgICBpZiAodmlzaXRlZFtpXSl7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB2aXNpdGVkW2ldID0gdHJ1ZTsKICAgICAgICBhcnJhbmdlbWVudC5yZXNpemUobGF5ZXIrMSk7CiAgICAgICAgYXJyYW5nZW1lbnQuYXQobGF5ZXIpID0gY2FuZGlkYXRlW2ldOwogICAgICAgIGRmcyhsYXllciArIDEsdGltZSxhcnJhbmdlbWVudCx2aXNpdGVkLGNhbmRpZGF0ZSxwYXRoKTsKICAgICAgICB2aXNpdGVkW2ldID0gZmFsc2U7CiAgICB9Cn0KIAovL+eqruiIiQp2ZWN0b3I8dmVjdG9yPGludD4+IGdlbmVyYXRlX3BhdGgodmVjdG9yPGludD4gY2FuZGlkYXRlLGludCB0aW1lKXsKIAogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PnBhdGg7CiAgICBib29sIHZpc2l0ZWRbdGltZV0gPSB7ZmFsc2V9OwogICAgdmVjdG9yPGludD4gYXJyYW5nZW1lbnQ7CiAgICBkZnMoMCx0aW1lLGFycmFuZ2VtZW50LHZpc2l0ZWQsY2FuZGlkYXRlLHBhdGgpOwogICAgcmV0dXJuIHBhdGg7CiAgICAvL3BhdGgucHVzaF9iYWNrKGRmcygwLHRpbWUsYXJyYW5nZW1lbnQsdmlzaXRlZCxjYW5kaWRhdGUpKTsKICAgIC8vZm9yKGludCBpPTA7IGk8cGF0aC5zaXplKCk7IGkrKykgY291dCA8PCBwYXRoLmF0KGkpIDw8ICIgIjsKIAp9CiAKaW50IG1haW4oKQp7CgkgICB2ZWN0b3I8aW50PiBjYW5kaWRhdGU7CiAgICBjYW5kaWRhdGUucHVzaF9iYWNrKDEwMTA1KTsKICAgIGNhbmRpZGF0ZS5wdXNoX2JhY2soMTA3MzIpOwogICAgY2FuZGlkYXRlLnB1c2hfYmFjaygxMDg2NSk7CiAgICAvL3ZlY3Rvcjx2ZWN0b3I8aW50Pj5wYXRoOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PnY7CiAgICB2PWdlbmVyYXRlX3BhdGgoY2FuZGlkYXRlLDMpOwogICAgcHJpbnR2ZWN0b3Iodik7Cn0=