*******++++++++;;;;;;;;;;;;;;:::::::::;;:::::::::;S#+:::::::::::::::::::;;;;;;;;;;;;;++++++++*******
****++++++++;;;;;;;;;;;;;;;;:::::::::::::::::;:::%###+::::::::::::;::::::::;;;;;;;;;;;;+;+++++*+****
***++++++++;;;;;;;;;;;;;;;::::::::::::::::::::::*###S%*+;:::::::::::::;:::::::;;;;;;;;;;;++++++++***
*++*++++++;;;;;;;;;;;:;;:::::::::::::::::::::::+####S%%SS?;;::::::::::::::::::::;;;;;;;;+++++++++***
*++++++++;;;;;;;;;;;;;::::::::::::::::::::::::+S######SS#S+::::::::::::::::::::::;;;;;;;;++++++++***
*++++++++;;;;;;;;;;;::::::::::::::::::::::::::*S#########S+:::::::::::::::::::::;;;;;;;;;;;+++++++**
**+++++++;;;;;;;;;;:::::::::::::::::::::::::;+*%S#######%+;:::::::::::::::::::::::;;;;;;;;;+++++++++
+++++++;;;;;;;;;;:;:::::::::::::::::::::::::*#%?%?%S#####*::::::::::::::::::::::::;:;;;;;;;;++++++++
++++++++;;;;;;;;;;;;:::::::::::::::::::::::::***?*?%S##S?:::::::::::::::::::::::::::;;;;;;;;;;++++++
+++++++;;;;;;;;;::::::::::::::::::::::::::::::+?????%%%;::::::::::::::::::::::::::::;;;;;;;;;;++++++
++++++++;;;;;;;:::::::::::::::::::::::::::::::;*???????*:::::::::::::::::::::::::::::;;;;;;;;;++++++
++++++;;;;;;;;;::::::::::::::::::::::::::::::::::;??????*+;:::::::::::::::::::::::::::::;;;;;;;+++++
++++;;;;;;;;;;:::::::::::::::::::::::::::::::::::*???????**+;:::::::::::::::::::::::::::::;;;;;;++++
+++++;;;;;;;:::::::::::::::::::::::::::::::::::+?%%?????????*;:::::::::::::::::::::::::::::;;;;;;+++
++++;;;;;;;:::::::::::::::::::::::::::::::::::;S%%%%%%????????;:::::::::::::::::::::::::::::;;;;;;++
++++;;;;;;;;;:::::::::::::::::::::::::::::::::+S%SSSS%%%%%?????;::::::::::::::::::::::::;;;;;;;;;;++
++;;;;;;;;::::::::::::::::::::::::::::::::::::+S####SSS%%%%%%%?*:::::::::::::::::::::::;;;;;;;;;;;++
+++;;;;;;;;:::::::::::::::::::::::::::::::::::%#########S%%%%%%%*::::::::::::::::::::::::;;;;;;;;;++
+++;;;;;;;;;:::::::::::::::::::::::::::::::::+###########SSSS%%%%+:::::::::::::::::::::::;;;;;;;;;++
+++;;;;;;;:::::::::::::::::::::::::::::::::::+S#S##S######SSSS%%%%+::::::::::::::::::::;;;;;;;;;+;;+
;;;;;;;;;;:::::::::::::::::::::::::::::::::::%#####%######SSSS%%%%%;,:::::::::::::::::::;;;;;;;;;;;;
;;;;;;;;;;;;::::::::::::::::::::::::::::::::?S####S+SS####SSS%%%%%%?;,:::::::::::::::::::;;:;:;;;;;;
;;;;;;;;;;:;:::::::::::::::::::::::::::::::*SS####?,+S####SS%%%????%?:,::::::::::::::::::::;;;;;;;;;
++;;;;;;;;;;::::::::::::::::::::::::::::::;S######;,,*#####S%%%??????*,::::::::::::::::;;;;;;;;;;;;+
++++++;;;;;;;:::::::::::::::::::::::::::::?######*,::+SSSS#S%%%%??%??%:,::::::::::::::::;;;;;;;;;;++
++++;;;;;;;;;::::::::::::::::::::::::::::*%S####?:::;%SSSSS##SS%%SSSSS+:::::::::::::::::::::;;;;;;;+
+;+;;;;;;;;;;:::::::::::::::::::::::::::;%%%SS#?::::*SSSSSSSSSSSSSSSS#+::::::::::::::::::::;;;;;;;;;
++++;;;;;;;;;;;;:;:::::::::::::::::::::;+*+*?%?:::::?SSSSSSSSSSSSSSSS#+::::::::::::::::::::;;;;;;;;;
+++;;;;;;;;;;::::::::::::::::::::::;;;++++::::::::::%#SSSS#S#SSSSSS###+,::::::::::::::::::::;;;;;;;;
++;;;;;;;:::::::::::::::::::::::::;;+++;:::::::::::+S###S#####SSSS###%::::::::::::::::::::::;;;;;;;;
++;;;;;;;::::::::::::::::::::::::::;+;:::::::::::::%##########SSSSS#S;,:::::::::::::::::::::;;;;;;;+
;;;;;;;;;:::::::::::::::::::::::::,::::::::::::::::%###########S#S?+;::::::::::::::::::::::::;;;;;;;
;;;;;;;;;:::::::::::::::::::,:::::,,:::::::::::,:,*S#############%:,,:::::::::::::::::::::::::;;;;;;
;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::,;SS###########SS+,:::::::::::::::::::::::::::;;;;;;
;;;;;;;;;::::::::::::::::::::::::::::::::::,:::,:?SS##S###SS###S+,::::::::::::,::::::::::::::::;;;;;
;;;;;;;;:::::::::::::::::::::::::,:,:,,::::::::,+SSS##SSSSS###S*:,,:,:::::::::::::::::::::::::;;;;;;
;;;;;;;;;::::::::::::::::,:,:,,:,::,,:,:,:::,::,*SSSSS#SSS###%+:,:,,,::,::,:,:::,,::::::::::;;;;;;;;
;;;;;;;;;;:::::::::,,,,,:,,,,,,,,,,,,,,,,,,,,::,:?SSS##SS##S%:,,,,,,,,,,,,,,:,,,,,,,:::::::::;;;;;;;
;+;;;;;;;;:::::::::::::,,:,,,,,,:,,,:,,,,,,,:,,,,:SS#SS%SSSS?:,,,,,,,,,,,,,,,,,,,,,::::::::;;;;;;;++
+++;;;;;;:;:::::::,,::::,:,:,:,,,,,,,::,,,,,,,,,,,?#SS%%%%S%%*:,,,,,::::::::,,:,::::::::::;;;;;;;;++
++++;;;;;;;:::::::::::,,,::,,:,,:,,,,,,,:,,:,,,,,,;SSS%??%S#S%+,,,,:::::::::,,,,::,::::::::;;;;;;;;;
+++;;;;;;;;;::::::::::,:::::::,,:,,,,,,:,,,::,,,,,,*#SS%*+%#SS*,,,:::::::::::::::::::::::::;;;;;;;;;
;++;;;;;;;;:;:::::::::::::::::::::::,,,,,,,,,,,,:,,:;+?*;;*%?*::::::::::::::::::::::::::;;;;;;;;;;;+
++++;;;;;;::;:::::::::::::::::::::::::::::::::::::::,,+*+;;+;;;:::::::::::::::::::::;;;;;;;;;;;;;;++
++++;;;;;;;;:;::::::::::::::::::,::::::::::::::::::::::+++;++;;::::::::::::::::::::;;;;;;;;;;;++++++
+++++;;;;;;;;;;::::::::::::::::::,:::::::::::::::::,:::;*+;;+;;::::::::::::::::::::;;;;;;;;;;;;+++++
++++++;;;;;;;;;;;::::::::::::::::::::::::::::::::::,:::;*++;;;;;::::::::::::,:::::::::::;;;;;;;+++++
++++++++;;;;;;;++++++;;;;::::::::::::::::,,:,:,,,,::::;;;++;;;+;:::::::::,::::::::::::::;;;;;;;;++++
++++++;;;;;;;;;;;+**??******++++++++++;;;;;;;;;;;;;;;;;;;;;+++++;:::::::::::::::::::;;;;;+;;;;++++++
+++++;;;;;;;;;;:::;+*??????????*????**???**********+***++++++++++;;;;;;;;:::::::::;;;;;++*++++++++++
+++++++;;;;;;;;;;::::;*???????????????????????????????????**?********+***++++++++++++++++******+++?%
+++++++;;;;;;;;;;:;::::;*?????????????????????????????%????%%%%??%%%?*?%?%%????????????????????**%##
+++++++++;;;;;;;;;:;;::::*??????????????%%?%%%%%%%%%%%%%%%%%%%??%%%%??%S%%%%%%%%%%%%%%%%%%%?????%%##
++++++++++;;;;;;;;::;:::::+***????????????????????????%????%%%%%%%%%%SS#SSSSSSSS%%%%%%%%%%%???%%SSS#
+++++++++;;;;;;;::;:::::::::::::;;;;++++****??????***+++++*******?????%%%%%%%%%S#S%%%%%%%%%???%%SSSS