*******++++++++++++;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;+++++++********
******++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++++++******
********+++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++++******
******++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++++***
****+++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++++**
***+++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++++*
**++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;++;++++++*
*+++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+%+:;;;;;;;;;;;;;;;;;;;;;;;:::::::;;:;;;;;;;;;;;;;;+;++++++++
*+++++++++;;;;;;;;;;;;;;;;;;;;;;:;;;;;;%#%;:;;;:;:;;;;;;;;;;;;;;:::::::::::::;;:;;;;;;;;;;;;;+++++++
*+++++++++;;;;;;;;;;;;;;;;;;;;:;::;;::?###?;:::::::;:::::::::::::::::::::::::::;::;;;;;;;;;;;+++++++
++++++++++;;;;;;;;;;;;;;;::;;;:::::;:*#####%+::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;++++++
++++++++;;+;;;;;;;;;;;;;;;;:;:::::::;S#######?+;;:::::::::::::::::::::::::::::::::::::;;;;;;;;;+++++
++++++++;;;;;;;;;;;;;::::::::::::::;%#########S?;:::::::::::::::::::::::::::::::::::::;;;;;;;;;;++++
++++++++;;;;;;;;;;;;:::::::::::::::*SS##########+:::::::::::::::::::::::::::::::::::::::;;;;;;;;++++
+++++++;;;;;;;;;;;;;::::::::::::::;++*%S###@###@*:::::::::::::::::::::::::::::::::::::::;;;;;;;;;+++
++++;;+;;;;;;;;;;;:::::::::::::::;+????%S######S;:::::::::::::::::::::::::::::::::::::::;:;;;;;;;;++
+++;;;;;;;;;;;;;;;:::::::::::::::;*SS???%%%?S##*:::::::::::::::::::::::::::::::::::::::::::;;;;;;;++
+++;;;;;;;;;;;;;;;::::::::::::::::+??****??*%%*::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;+
+++;+;;;;;;;;;;:::::::::::::::::::;***???????;:::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;+
+++++;;;;;;;;;;::::::::::::::::::::;*?%%%???*;::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;
+++;;;;;;;;;;;:::::::::::::::::::::::;;??%%?%%*+::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;
+++;;;;;;;;;;;:;;:::::::::::::::::::::;%%?SS%???*;:::::::::::::::::::::::::::::::::::::::::;;;;;;;;;
++;;;;;;;;;;;;:::::::::::::::::::::::+SSS#S%%%????*;:::::::::::::::::::::::::::::::::::::::::;;;;;;+
+++;;;;;;;;;;;::::::::;;;;;::::::::::%#S##S#SSSS%%??+::::::::::::::::::::::::::::::::::::::::;;;;;;;
++;;;;;;;;;;;;:::::::;;;;;;;;::::::::%@%S####SSSSS%%?+:::::::::::::::::::::::::::::::::::::::;;;;;;;
+;;;;;;;;;::::::::::::;;;;;;++::::::;S@#####SSSSS%%%%?*::::::::::::::::::::::::::::::::::::::;;;;;;;
;;;;;;;;;;;:::::::::::::::;+**?+::::?###########SSS%%%?*:::::::::::::::::::::,:::::::::::::::;;;;;;;
+;+;;;;;;;;::::::::::::::::?#SS#%%**########@@###SSSS%%?*:::::::::::::::::::::::::::::::::::::;;;;;;
+++;;;;;;;;;::::::::::::::;S@@#SS@@@@#SSSS##@@@@####SSS%%*::::::::::::::::::::::::::::::::::::;;;;;;
+;;;;;;;;;;;;::::::::::::::+?S###@@###SS#####@@@@######S%%+:::::::::::::::::::::::::::::::::::;;;;;;
++;;;;;;;;;;;:::::::::::::::::*S####SS########S#######SS%%?;:::::::::::::::::::::::::::::::::;;;;;;+
+++;;;;;;;;;;:::::::::::::::::;*%%########@@#@#SS#######S%?*:::::::::::::::::::::::::::::::;;;;;;;;;
+++;;;;;;;;;:::::::::::::::::;+??%#####@@#%S@@@######SSSS%??;::::::::::::::::::::::::::::;::;;;;;;;;
+;;;;;;;;;;::::::::::::::::::;**;;?S####?;:*#@@@@@@@@##SS%??+::::::::::::::::::::::::::::::::;;;;;;;
;;;;;;;;;;;:::::::::::::::::::;;:::*%?+;::::%#@@########SS%%+::::::,::::::::::::::::::::::::;;;;;;;;
;;;;;;;;;;;:::::::::::::::::::::::::::::::::*############SS%*::::::,:::::::::::::::::::::::;;;;;;;+;
+++;;;;;;;:::::::::::::::::::::::::::::::::,+S#############S*:::,::::::::::::::::::::::::::;;;;;;;++
++;;;;;;;;;::::::::::::::::::::::::::::::::,;%##############+:::::::::::::::::::::::::::::::;;;;;;;+
++;;;;;;;;;:::::::::::::::::::::::::::::::::+?#############%:,:::::::::::::::,::::::::::::::;;;;;;;+
++;+;;;;;;:::::::::::::::::::::::::::::::::+%%SSS##########S+::::::::::::::::::::::::::::::;;;;;;;;+
++;;;;;;;;;;;::::::::::::::::::::::::::::::???SSS############?::::::::::::::::::::::::::::::;;;;;;+;
++++;;;;;;;;;;:::::::::::::::::::::::::::::%?%SS#######%??%*+;:::::::::::::::::::::::::::::;;;;;;;;;
++++++;;;;;;;:::::::::::::::::::::::::::::+#S#########S;,,,,,,,:,::::::::::::::::::::::::::;;;;;;+++
++++++++;;;;;;;;:::::::::::::::::::::::::;S###########+,::,::::::::,:::::::::::::::::::::::;;;;;;;++
+++++++;;++;;;;;;;;;:::::::::::::::::::::%###########%:,:::::::,,:::::::::::::::::::::::::;;;;;;;;++
++++++++;;;;;;;;;;;;::::::::::::::::::::*############?:,:::::::::,,:::::::,,:::::::::::::::;;;;;;+++
++++++++;;;;;;;;;;;::::::::::::::::::::;S##########@#*,,,,::::,::::,:::::::::::::::::::::;;;;;;;+++*
++++++++;;;;;;;;;::::::::::::::::::::::;#############+,:,,,::::::::,::::::::::::::::::::;;;;;;;;;++*
++++++++;;;;;;;:::::::::::::::::::::::::+S#########S+:,:,:,:::::::::::::::::::::::::::;:;;;;;;+;++++
+++++++;+;;;;;;;::::::::::::::::::::::::,+########%:,,,:::::::::::::::::::::::::::::::;;;;;;;+++++++
+++++++;;;;;;;;:::::::::::::::::::::::::::S@######%;::::::::::::::::::,:::::::::::::::;:;;;;;+++++++
+++++++++;;;;;;;::::::::::::::::::::::::::?@######S*::::::::::::::::::::::::::::::::;;;;;;;;;+++++++
**+++++++++;;;;;;;;::;::::::::::::::::::::+@@######S;:::::::::::::::::::::::::::::;;;;;;;;;+++++++++
+++++++++;;;;;:::::::;:::::::::::::::::::::?%S#####S+:::::::::::::::::::::::::::;;;;;;;;;;;+++++++**
+++++++;++;;;;;;;;;::::::::::::::::::::::::,:*?%%%?*;::::::::::::::::::::::::::::;;;;;;;;;;+++++****