# vim: set fileencoding=utf8 : def permu(xs): if xs: r , h = [],[] for x in xs: if x not in h: ts = xs[:]; ts.remove(x) for p in permu(ts): r.append([x]+p) h.append(x) return r else: return [[]] def permu2(xs): if len(xs)<2: yield xs else: h = [] for x in xs: h.append(x) if x in h[:-1]: continue ts = xs[:]; ts.remove(x) for ps in permu2(ts): yield [x]+ps #print permu(['a','a','c']) #for i in permu2(['a','a','c']): print i #for i in permu2(list(u"бер")): print ''.join(i)