solution 1 and 2
solution3