permutation recursion