# Triangle, square, pentagonal, hexagonal, heptagonal, and octagonal numbers are all figurate (polygonal) numbers and are generated by the following formulae:
# Triangle 	  	P3,n=n(n+1)/2 	  	1, 3, 6, 10, 15, ...
# Square 	  	P4,n=n2 	  	1, 4, 9, 16, 25, ...
# Pentagonal 	  	P5,n=n(3n−1)/2 	  	1, 5, 12, 22, 35, ...
# Hexagonal 	  	P6,n=n(2n−1) 	  	1, 6, 15, 28, 45, ...
# Heptagonal 	  	P7,n=n(5n−3)/2 	  	1, 7, 18, 34, 55, ...
# Octagonal 	  	P8,n=n(3n−2) 	  	1, 8, 21, 40, 65, ...

# The ordered set of three 4-digit numbers: 8128, 2882, 8281, has three interesting properties.

#     The set is cyclic, in that the last two digits of each number is the first two digits of the next number (including the last number with the first).
#     Each polygonal type: triangle (P3,127=8128), square (P4,91=8281), and pentagonal (P5,44=2882), is represented by a different number in the set.
#     This is the only set of 4-digit numbers with this property.

# Find the sum of the only ordered set of six cyclic 4-digit numbers for which each polygonal type: triangle, square, pentagonal, hexagonal, heptagonal, and octagonal, is represented by a different number in the set.

#all numbers shizzlemcdizz

triangle = []
square = []
pentagonal = []
hexagonal = []
heptagonal = []
octagonal = []

for i in range(1,150):
    r = (i*(i+1)//2)
    if len(str(r)) == 4:
        triangle.append(r)
    r = (i**2)
    if len(str(r)) == 4:
        square.append(r)
    r = (i*(3*i-1)//2)
    if len(str(r)) == 4:
        pentagonal.append(r)
    r = (i*(2*i-1))
    if len(str(r)) == 4:
        hexagonal.append(r)
    r = (i*(5*i-3)//2)
    if len(str(r)) == 4:
        heptagonal.append(r)
    r = (i*(3*i-2))
    if len(str(r)) == 4:
        octagonal.append(r)

all_polygonals = [square, pentagonal, hexagonal, heptagonal, octagonal]

for second in all_polygonals:
    for n1 in triangle:
        for n2 in second:
            if str(n1)[2:4] == str(n2)[0:2]:
               for third in all_polygonals:
                   if third != second:
                       for n3 in third:
                          if str(n2)[2:4] == str(n3)[0:2]: 
                              for fourth in all_polygonals:
                                  if fourth != third and fourth != second:
                                      for n4 in fourth:
                                         if str(n3)[2:4] == str(n4)[0:2]: 
                                            for fifth in all_polygonals:
                                                if fifth != fourth and fifth != third and fifth != second:
                                                    for n5 in fifth:
                                                        if str(n4)[2:4] == str(n5)[0:2]: 
                                                            for sixth in all_polygonals:
                                                                if sixth != fifth and sixth != fourth and sixth != third and sixth != second:
                                                                    for n6 in sixth:
                                                                        if str(n5)[2:4] == str(n6)[0:2] and str(n6)[2:4] == str(n1)[0:2]: 
                                                                            result = n1 + n2 + n3 + n4 + n5 + n6
                                                                            print("Numbers are: ", n1, n2, n3, n4, n5, n6)
                                                                            print("The sum of the numbers are: ", result)