def build(n,m=0):
" returns a generator that will successively return permutions on n integers m at a timt (nPr)"
if (m==0):
m = n
source = """def perm(n,m):"""
source = source + """\n r=set(range(1,n+1))""" # 1 indent already!
source = source + """\n s0=r"""
indent=1
for z in range(0,m): # main source build loop
source= source + """\n""" + " ".ljust(indent)+ "for " + "i" + str(z) + " in s" + str(z) + ":"
indent = indent+1
# build diff string
diff="(["
for k in range(0,z+1):
diff=diff+ "i" + str(k)+","
diff=diff[:-1]+ "])"
#print "diff = " + diff
source=source + """\n"""+" ".ljust(indent)+"s"+str(k+1)+"=r.difference"+diff
diff = diff[2:-2]
#source = source + """\n""" + " ".ljust(indent) + "print " + diff
source = source + """\n""" + " ".ljust(indent) + "yield " + diff+","
#print source
obj=compile(source,'',"exec")
exec(obj)
return perm(n,m)