import itertools import math MAX = 17 def is_sqare(x): y = int(round(math.sqrt(x))) return x == y*y sqsum = lambda s: is_sqare(sum(s)) pairs = filter(sqsum, itertools.combinations(range(1,MAX+1),2)) pairs=pairs+[(b,a) for (a,b) in pairs] m = {} for (a,b) in pairs: l = m.get(a) or [] m[a] = l + [b] def getNext(l,e): if len(l) >= 17: print(l) return for n in m[e]: if n not in l: getNext(l+[n],n) for a in range(1,MAX+1): getNext([], a)
Standard input is empty
[17, 8, 1, 15, 10, 6, 3, 13, 12, 4, 5, 11, 14, 2, 7, 9, 16] [16, 9, 7, 2, 14, 11, 5, 4, 12, 13, 3, 6, 10, 15, 1, 8, 17]