4#

some optimization