Gordon Brown rules out snap election