text: 
  #===============================================================================
  # code from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/190465
  # all (c) etc. are of the authors of this procedures, see link above
  #===============================================================================
  
  
  def xcombinations(items, n):
      if n==0: yield []
      else:
          for i in xrange(len(items)):
              for cc in xcombinations(items[:i]+items[i+1:],n-1):
                  yield [items[i]]+cc
  
  def xuniqueCombinations(items, n):
      if n==0: yield []
      else:
          for i in xrange(len(items)):
              for cc in xuniqueCombinations( items[i+1:], n-1) :
                  yield [items[i]]+cc
                              
  def xselections(items, n):
      if n==0: yield []
      else:
          for i in xrange(len(items)):
              for ss in xselections(items, n-1):
                  yield [items[i]]+ss
  
  def xpermutations(items):
      return xcombinations(items, len(items))
  
  #supposedly it is faster
  def permutations2(L):
      if len(L) <= 1:
          yield L
      else:
          a = [L.pop(0)]
          for p in permutations(L):
              for i in range(len(p)+1):
                  yield p[:i] + a + p[i:]
  