#include <iostream>
#include <vector>
using namespace std;
void backtrack(vector<int>& nums, vector<bool>& used, vector<int>& current, vector<vector<int>>& result) {
if (current.size() == nums.size()) {
result.push_back(current);
return;
}
for (int i = 0; i < nums.size(); ++i) {
if (used[i]) continue;
used[i] = true;
current.push_back(nums[i]);
backtrack(nums, used, current, result);
used[i] = false;
current.pop_back();
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> result;
vector<bool> used(nums.size(), false);
vector<int> current;
backtrack(nums, used, current, result);
return result;
}
int main() {
vector<int> nums = {1, 2, 3}; // Replace with your input array
vector<vector<int>> result = permute(nums);
cout << "Permutations:" << endl;
for (const auto& perm : result) {
cout << "[";
for (int i = 0; i < perm.size(); ++i) {
cout << perm[i];
if (i < perm.size() - 1) cout << ", ";
}
cout << "]" << endl;
}
return 0;
}