class Solution {
public:
    vector<vector<int>> res;
    vector<vector<int> > permute(vector<int> &num) {
        vector<int> a;
        vector<bool> flag(num.size(),true);
        for(int i=0;i<num.size();i++){
            a.push_back(num[i]);
            flag[i]=false;
            dfs(num,a,flag);
            a.pop_back();
            flag[i]=true;
        }
        return res;
    }
    void dfs(vector<int> &num,vector<int> a,vector<bool> &flag){
        if(a.size()==num.size()){
            res.push_back(a);
        }
        for(int i=0;i<num.size();i++){
            if(flag[i]==false) continue;
            a.push_back(num[i]);
            flag[i]=false;
            dfs(num, a,flag);
            a.pop_back();
            flag[i]=true;
        }
    }
};