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