import sys, functools

# solving Project Euler 18 and 67 using dynamic programming

@functools.lru_cache(maxsize=None)
def find_max_path(row, col):
    global triangle
    #print ("find_max_path, row=", row, "col=", col)
    height=len(triangle)
    last_row=height-1
    if row==last_row:
        return triangle[row][col]
    else:
        left_path=find_max_path(row+1, col)
        right_path=find_max_path(row+1, col+1)
        return triangle[row][col] + max(left_path, right_path)

def list_of_str_to_list_of_ints(l):
    return [int(i) for i in l]

def main():
    global triangle
    f=open(sys.argv[1],"r")
    ar=f.readlines()
    f.close()
    triangle=[list_of_str_to_list_of_ints(item.rstrip().split()) for item in ar]
    #print (triangle)
    print (find_max_path(0, 0))

main()

