*********++++++++++++++++;+;++;;;;;+????????%%%%%?????????????????*+;;;;;;;;;;;;;;;+;+++++++********
********+++++++++++++;;;;+++*?*+++*?%%%%%%%SS#S%???????????????????*;;;;;;;;;;;;;;;;;;+++++++*******
*********??*******????**???????????%??????%%%SS%%%%%%???%%%%%%%%??*+;;;;;;;;;;;;;;;;++++++++++******
***+++*???%????????**++++++++++++*****??????%%%%%%%SSSSSSSSS%SS%?*+;;;;;;;;;;;;;;;;;;;;+++++++******
*****++********+++++;;;;;;;;;;;;;;;;;;;;;;+*?%SS###########SSS%?*+;;;;:::;;;;;;;;;;;;;;;;+++++++****
****+++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;++**S#@#??***********++;;;;::;;;;;;;;;;;;;;;;;+++++++****
*****+++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:*####?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++++***
*****+++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:+###S%%%*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++***
***++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:*######SSS?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++++**
++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;?#########%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++++**
+++++++++;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*%?%S####@#*+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++**
*++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*%??*?S####*:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++**
++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;*???%SS%+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++++
+++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+??*???+:::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++
+++++++;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;+*?????*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++
+++++++;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;;;;;*?%???????*+;:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++
++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;?%??%%%%%????*+;;;;;;;;;;;;;;;;;;;;;;:;;;;;;;;;;;;;;+++++
++++++;;;;;;;;;;;;;;;;;;;:;;;;;;:::;;::;;:;S#S%%%%%%%%?%??*;:;;;;;;;;;;;;;;;;:;;;;;;;;;;;;;;;;;+++++
+++++++;;;;;;;;;;:;::::;:::::::::::::::::::+S##SS%%%%%%%%%?*;:;:::::;::::::::::::::::::;;;;;;;;+++++
+++++;;;;;;;;;;;;;::::::::::::::::::::::::;:*%%S##S%%%%%%%%%?;:::::::::::::::::::::::::;;;;;;;;+++++
+++++;;;;;;;;;;;;;::::::::::::::::::::::::::*SS%%S##S%%%%%%%%+:::::::::::::::::::::::::;;;;;;;;+++++
+++++;;;;;;;;;;;;;:;::::::::::::::::::::::::;%SS%%##S%%%%%%%%?;::::::::;::::::::::::::::;;;;;;++++++
+++++++;;;;;;;;;;:::::::::::::::::::::::::::;????%##S%%%%%%%%%+:::::::::::::::::::::::::;;;;;;++++++
+++++;;;;;;;;;;::::::::::::::::::::::::::::::+*+*%###S%%S%%%%%?;:::::::::::::::::::::::;;;;;;;++++++
++++;;;;;;;;;;;::::::::::::::::::::::::::::;++;;*S###S%%SSS%%%%+:::::::::::::::::::::::;;;;;;;++++++
++++;;;;;;;;;;;:::::::::::::::::::::::::::;%%+;;+S###SSSSSSS%%%*::::::::::::::::::::::::;;;;;;++++++
++++++;;;;;;;;;:::::::::::::::::::::::::;;?%S+;+?SS#SSSSSSSSSS%*:::::::::::::::::::::::;;;;;;;;+++++
++++++;;;;;;;;:::::::::::::::::::::::::;+*%S%+;;%SSSSSSSSSSSSS%*:::::::::::::::::::::::;;;;;;;++++++
+++;;;;;;;;;;;:;:::::::::::::::::::::::;++++;::+SSSSSSSSSSSSSSS?::::::::::::::::::::::::;;;;;+++++++
+++;;;;;;;;;;::::::::::::::::::::::::::::::::::?###SSSSSS%SSSS%?::::::::::::::::::::::::;;;;;;;+++++
+++++;;;;;;;;;::::::::::::::::::::::::::::::::+%S##SSSSS%%%%%%%?;:::::::::::::::::::::::;;;;;;;+++++
++++;;;;;;;;;;::::::::::::::::::::::::::::::::+S#####SSS%%%%%%%%;:::::::::::::::::::::::;;;;;;;+++++
++++;;;;;;;;;::::::::::::::::::::::::::::::::::S############S+;;:::::::::::::::::::::::;;;;;;;;;++++
++++;;;;;;;;;:::::::::::::::::::::::::::::::::+#############%::::::::::::::::::::::::::;;;;;;;;;++++
+++;;;;;;;;;;;::::::::::::::::::::::::::::::::%############S+::::::::::::::::::::::::::;;;;;;;;;++++
++++;;;;;;;;;::::::::::::::::::::::::::::::::;S######S#####?:::::::::::::::::::::::::::;;;++++++++++
+++;;+;;;;;;;::::::::::::::::::::::::::::::::*SSS####S###S*:::::::::::::::::::::::::::;;;?%?*******?
+++;;;;;;;;;;;:::::::::::::::::::::::::::::::+%S###S####S;::::::::::::::::::::::::::::+??SS%??%%%%%S
++++;;;;;;;;;;::::::::::::::::::::::::::::::::+####S####%;::::::::::::::::::::::::::::;+**+*?*?%%SS%
++++++;;;;;;;;;;::::::::::::::::::::::::::::::;%SSSSSS#SS*::::::::::::::::::::::::::::;;;;;;+**+++++
+++++;;;;;;;;;;;;::::::::::::::::::::::::::::::*##S%%%###S+:::::::::::::::::::::::::;;:;;;;;;;+**+++
+++++;;;;;;;;;;;:::::::::::::::::::::::::::::::;%SS?++%#S%;:::::::::::::::::::::::::;;;;;;;;;;;+***+
+++++++;;;;;;;;;;::::::::::::::::::::::::::::::::;*+;;+?+;:::::::::::::::::::::::::;:;;;;;;;;;;;;*%S
++++++;;;;;;;;;;;;::::::::::::::::::::::::::::::::;*+;;++;;::::::::::::::::::::::::::::::;;;;;;+?S#@
+++++++;;;;;;;;;;::::::::::::::::::::::::::::::::::+*;;+*+;:::::::::::::::::::::::::::;;;;;;;*%##@##
+++++++;+;;;;;;;;::::::::::::::::::::::::::::::::::;++;;+;;::::::::::::::::::::::::::::;;;;*S#@@##@@
+++++++;;;;;;;;;;;:::;+++;;;;;;;;;;;;:::::::::::::;;++;;+*+;::::::::::::::::::::::;:::::;?#@@###@@#S
++++++++;;;;;;;;;;;::;;+*?***++++++++++++++++;;;;;+;+;+++*++;::::::::::::::;;:;:::::::;*S@@##@@@@%**
*++++++++;;;;;;;;;;;;:::;*?%?*%?*?%?*????*??*****?**++++++++++++;;;;::::::;;;;;;;:::;+%#@##@@@@S**?S
*++++++++;;;;;;;;;;;;;;:::;*%*%??%%%?%%%??%%%?%%%??%%?*???*??****+++++++;;;++++++;;*%#@#@@@@#%*+*%##
**++++++++;;;;;;;;;;;;;:::::+?%?????????%%%%%%%%%?%%%??%%*?%%??%%%%%%%??????*++**+*#@@@@@#SSS%%?*?SS
**++++++++++;;;;;;;;;;;;;;;;;+*****??%??%%???%%?%%%%%%%%%%%%%%%SSSS%%%%%%%%%%*+???%S#@#SS%%S?%%%%%?%
****+++++++++;;;;;;;;;;;;;;+++++++****???%%%%?%%%%%%%%%%%%%?%?%%S%%%%%SS%%%%%?+*?%%%SSS%S%S%??????%%
****++++++++++;;;;;;;;;;;;;;++++++++**+******+*****????????%%%%%%%%%%%SSS%%%%%%?%%SSSSSS%SSS%%%%%SSS
*****+++++++++;;;;;;;;;;;;;;++++++++++++++++++++*******++++++++**?%%%%%%%%%%%%%S%%%SSSS%%%%%%SSSS%SS