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