'''
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(3n1)/2	 	1, 5, 12, 22, 35, ...
Hexagonal	 	Hn=n(2n1)	 	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.
'''
MAX = 100000
tri = [ n * (n + 1) / 2 for n in xrange(0, MAX)]
pen = [ n * (3 * n - 1) / 2 for n in xrange(0, MAX)]
hex = [ n * (2 * n - 1) for n in xrange(0, MAX)]
pen_dict = dict.fromkeys(pen, 1)
hex_dict = dict.fromkeys(hex, 1)

for i in xrange(286, 100000):
    v = tri[i]
    if v in pen_dict and v in hex_dict:
        print v
        break
