Functional solution for problem 4