# Задача 61
# Цикличные фигурные числа
# К фигурным (многоугольным) числам относятся треугольные, квадратные, пятиугольные, шестиугольные, семиугольные
# и восьмиугольные числа, которые расчитываются по следующим формулам:
#
# Треугольные	 	P3,n=n(n+1)/2	 	1, 3, 6, 10, 15, ...
# Квадратные	 	P4,n=n2	 	1, 4, 9, 16, 25, ...
# Пятиугольные	 	P5,n=n(3n−1)/2	 	1, 5, 12, 22, 35, ...
# Шестиугольные	 	P6,n=n(2n−1)	 	1, 6, 15, 28, 45, ...
# Семиугольные	 	P7,n=n(5n−3)/2	 	1, 7, 18, 34, 55, ...
# Восьмиугольные	 	P8,n=n(3n−2)	 	1, 8, 21, 40, 65, ...
# Упорядоченное множество из трех четырехзначных чисел: 8128, 2882, 8281, обладает тремя интересными свойствами
#
# Множество является цикличным: последние две цифры каждого числа являются первыми двумя цифрами следующего
# (включая последнее и первое числа).
# Каждый тип многоугольника — треугольник (P3,127=8128), квадрат (P4,91=8281) и пятиугольник (P5,44=2882) —
# представлены различными числами данного множества.
# Это — единственное множество четырехзначных чисел, обладающее указанными свойствами.
# Найдите сумму элементов единственного упорядоченного множества из шести цикличных четырехзначных чисел, в котором каждый
# тип многоугольников — треугольник, квадрат, пятиугольник, шестиугольник, семиугольник и восьмиугольник — представлены
# различными числами этого множества.
import itertools


def is_cicle(a, b):
    if (a % 100) == (b // 100):
        return True
    return False


P3 = []
P4 = []
P5 = []
P6 = []
P7 = []
P8 = []

for n in range(1000):
    p = (n * n + n) / 2
    if p > 10000:
        break
    if p > 999:
        P3.append(int(p))

for n in range(1000):
    p = n * n
    if p > 10000:
        break
    if p > 999:
        P4.append(p)
for n in range(1000):
    p = (3 * n * n - n) / 2
    if p > 10000:
        break
    if p > 999:
        P5.append(int(p))
for n in range(1000):
    p = (2 * n * n - n)
    if p > 10000:
        break
    if p > 999:
        P6.append(p)
for n in range(1000):
    p = (5 * n * n - n * 3) / 2
    if p > 10000:
        break
    if p > 999:
        P7.append(int(p))
for n in range(1000):
    p = n * (3 * n - 2)
    if p > 10000:
        break
    if p > 999:
        P8.append(p)
P = []

P.append(P3)
P.append(P4)
P.append(P5)
P.append(P6)
P.append(P7)
P.append(P8)
#
# for i in range(len(P)):
#     print(P[i])

for i in itertools.permutations('012345', 6):
    for i1 in range(len(P[int(i[0])])):
        for i2 in range(len(P[int(i[1])])):
            if is_cicle(P[int(i[0])][i1], P[int(i[1])][i2]):
                for i3 in range(len(P[int(i[2])])):
                    if is_cicle(P[int(i[1])][i2], P[int(i[2])][i3]):
                        for i4 in range(len(P[int(i[3])])):
                            if is_cicle(P[int(i[2])][i3], P[int(i[3])][i4]):
                                for i5 in range(len(P[int(i[4])])):
                                    if is_cicle(P[int(i[3])][i4], P[int(i[4])][i5]):
                                        for i6 in range(len(P[int(i[5])])):
                                            if is_cicle(P[int(i[4])][i5], P[int(i[5])][i6]):
                                                if is_cicle(P[int(i[5])][i6], P[int(i[0])][i1]):
                                                    print(i)
                                                    print(P[int(i[0])][i1] + P[int(i[1])][i2] + P[int(i[2])][i3] +
                                                          P[int(i[3])][i4] + P[int(i[4])][i5] + P[int(i[5])][i6])

# 8256 5625 2512 1281 8128 2882  = 28684 ('0', '1', '4', '5', '3', '2')
