'''
Created on Mar 10, 2013

@author: RDrapeau

Triangle, pentagonal, and hexagonal numbers are generated by the following formulae:

Triangle         Tn=n(n+1)/2         1, 3, 6, 10, 15, ...
Pentagonal         Pn=n(3n-1)/2         1, 5, 12, 22, 35, ...
Hexagonal         Hn=n(2n-1)         1, 6, 15, 28, 45, ...
It can be verified that T285 = P165 = H143 = 40755.

Find the next triangle number that is also pentagonal and hexagonal.
'''
triangles = {}
pentagons = {}
hexagons = {}

def populate():
    for i in range(2, 60000):        
        triangles[i] = triangle(i)
        pentagons[pentagon(i)] = i
        hexagons[hexagon(i)] = i
        
def triangle(n):
    return n * (n + 1) / 2

def pentagon(n):
    return n * (3 * n - 1) / 2

def hexagon(n):
    return n * (2 * n - 1)

populate()
for i in range(2, 60000):
    n = triangles[i]
    if n in pentagons and n in hexagons:
        print n