solution to problem #21