Solution by Sean Meininger