more generalization
another step forward
another step forward
finished generalization of permutation