def permute( values, perms = list(), cur_perm = list() ):
    if len( values ) == 0:
        perms.append( cur_perm )
    else:
        for value in values:
            new_values = values[:]
            new_values.remove( value )
            new_perm = cur_perm[:]
            new_perm.append( value )
            permute( new_values, cur_perm = new_perm )
    return perms