非常强;

void dfs(int index) {
    if (index == n) {
        vector<int> vec;
        for (int i : dend) {
            vec.push_back(i);
        }
        for (int i = de.size() - 1; i >= 0; i--) {
           vec.push_back(de[i]);
        }
        vecs.push_back(vec);
        return;
    }
    if (de.empty()) {
        de.push_back(vec[index]);
        dfs(index + 1);
    }
    else {
        int si = de.size();
        for (int i = 0; i <= si; i++) {
            if (i != 0) {
                dend.push_back(de.back());
                de.pop_back();
            }
            de.push_back(vec[index]);
            dfs(index + 1);
            de.pop_back();
        }
        int nn = dend.size();
        for (int i = nn - 1; i >= nn-si; i--) {
            de.push_back(dend[i]);
        }
        for (int i = 0; i < si; i++) {
            dend.pop_back();
        }
    }
}