If You change : print reduce (lambda x,y: (x[1],x[0]+x[1], x[2]+[x[1]]), xrange(10), (0,1,[]))[2] into : print reduce (lambda x,y: (x[1],x[0]+x[1], x[2]+[x[1]]), xrange(99), (0,1L,[]))[2] it should remain working without overflow...