DFS permutation

Key:

1. When to add list to final result;
2. How to keep track of visited elements
permuteUnique

using boolean[] visit is more desirable than " list. contains() "

since in case there are repeated elements, boolean array is able to
accurately record visit history