better solution for problem 3