improved solution 55