Solution by Aaron Smith