public void standard(List<Integer> candidate, int begin,
                         List<List<Integer>> res) {
        if (begin >= candidate.size()) {
            res.add(new ArrayList<>(candidate));
            return;
        }
        for (int i = begin; i < candidate.size(); ++i) {
            swap(candidate, i, begin);
            standard(candidate, begin + 1, res);
            swap(candidate, i, begin);
        }
    }