Improved solution 27.