*******++++++;+;;;;;;;;;;;;;;;;;;:::;::::::::?##?::::::::::::::::;:::::;;;;;;;;;;;;+;;;+++++++******
*****+++++++;;;;;;;;;;;;;;;;;:::::::;::;::::+S###*;:::::::::::::::::::::::;;;;;;;;;;;;;;;++++++*****
***+++++++++;;;;;;;;;;;;;;;:;::::::::::::::;S##S%%?*+;:::::::::::::::::::::::;;;;;;;;;;;;++++++++***
**++++++++;;;;;;;;;;;;;;;;;;;:::::::::::::;%####S%S#S*;;;::::::::::::::::::::::;;;;;;;;;+++++++++***
**++++++++;;;;;;;;;;;::::::::::::::::::::;%#######S#S?;::::::::::::::::::::::::::;;;;;;;;++++++++***
**+++++++;;;;;;;;;;::::::::::::::::::::::;?S########?*::::::::::::::::::::::::::;:;;;;;;;;;;++++++**
**+++++++;;;;;;;;;;;:::::::::::::::::::;%%%%%S#####S*;::::::::::::::::::::::::::::;;;;;;;;;++++++++*
++++++++;;;;;;;;;;:;;:::::::::::::::::::*?*?**%S####*:::::::::::::::::::::::::::::::;;;;;;;+++++++++
++++++++;;;;;;;;;;:::::::::::::::::::::::;*????%SS?;::::::::::::::::::::::::::::::::;;;;;;;;;;++++++
+++++++;;;;;;;;;;;;:::::::::::::::::::::::*???????+:::::::::::::::::::::::::::::::::;;;;;;;;;+++++++
++++++;;;;;;;;;;:;:::::::::::::::::::::::::;;*?????*+;::::::::::::::::::::::::::::::::;;;;;;;;++++++
++++++;;;;;;;;;;::::::::::::::::::::::::::::;???????**+::::::::::::::::::::::::::::::::;;;;;;;;;++++
++++;;;;;;;;;::::::::::::::::::::::::::::::+%%???????***;::::::::::::::::::::::::::::::;;;;;;;;;;+++
+++++;;;;;;;;;;;::::::::::::::::::::::::::;%%%%%%????????;::::::::::::::::::::::::::::::;;;;;;;;;+++
+++++;;;;;;;;;::::::::::::::::::::::::::::;%S%%%%%????????;:::::::::::::::::::::::::::::;;;;;;;;;+++
++++;;;;;;;;:::::::::::::::::::::::::::::::+S####S%%%%%%??*:::::::::::::::::::::::::::::;:;;;;;;;+++
++;;;;;;;;;:::::::::::::::::::::::::::::::::*########S%%%%?+::::::::::::::::::::::::::::::;;;;;;;+++
++++;;;;;;;;:::::::::::::::::::::::::::::::::%#SSS###SS%%%%?;:::::::::::::::::::::::::::::;;;;;;;;++
++++;;;;;;;:::::::::::::::::::::::::::::::::::%S%%SSSSSS%%%%?:::::::::::::::::::::::::::::;;;;;;;;++
+++;;;;;;;::;::::::::::::::::::::::::::::::::;%SSSS%%SSS%%%%%;,::::::::::::::::::::::::::;;;;;;;;+++
;;;;;;;;;;;::;;:::::::::::::::::::::::::::,;%S#SSSSS%SS%%%%??*,::::::::::::::::::::::::::;;;;;;;;;++
;;;;;;;;;;::::::::::::::::::::::::::::::::;S###SSS%%%#S%%?????:,:::::::::::::::::::::::::::;;;;;;+++
+;;;;;;;;;::::::::::::::::::::::::::::::*%#####SS%%%S#S%%?????*:,::::::::::::::::::::::::;;+++++++++
;;;;;;;;;:::::::::::::::::::::::::::::;**%S#%*;;???*?##%%%%%???+,::::::::::::::::::::::::;+*?*+++***
;;;;;;;;;::::::::::::::::::::::::::::;*%%%%%;,,:?SS%S#SS%%%SSSS%+,,:::::::::::::::::::::::;??????%S%
+;;;;;;;;;:::::::::::::::::::::::::;+**+;**:,::,;?*?##SS%%%SSSSS%;,,:::::::::::::::::::::::;**??+*?%
;;;;;;;;:::::::::::::::::::::::::::;+;;::,,::::,;??%SSSS%%%SSSSSS+,::::::::::::::::::::::;;;;;;**+++
+;;;;;;;:::::::::::::::::::::::::::::::::::::::,;??**%SSSSSSSSSSS?:::::::::::::::::::::::::;;;;;+**+
++;;;;;;;;:::::::::::::::::::::,::::::::::::::,:+++++*%SSSSSSSSSS%::::::::::::::::::::::::::;;;;;+**
;;;;;;;;;;;:;:::::::::::::::::::::::::::::::::,:%*;++?SSSSS##S%?%?::::::::::::::::::::;;;;;;;;;;;;+*
+;;;;;;;:;;:::::::::::::::::::::::::::::::::::,;SS%%%SSS#####S+,::,::::::::::::::::::;;;;;;;;;;;;+++
+;;;;;;;;;::::::::::::::::::::::::::::::::::::,?######S######S;,,,:::::::::::::::::::::::::;;;;;;;;;
;+;;;;;;;;:::::::::::::::::::,::::::,::::,,::,;S#####SSS#####*,::::::::::::::::::::::::::::::;;;;;;;
;;;;;;;;;:::::::::::::::::::,,,:,::::::::,,,::?######SSS##S#?:,,,,:::,::::::::::,:::::::::::;;;;;;;+
++;;;;;;;;;;::::::::::::::::::::::::,:::::::,:SSSSSSSS%S##S?:,:::,::,:,,,:::::::::::::::::::::;;;;;;
;++;;;;;;;;;;:::::::::::::::::::::::::::::::,;SS%SSSSSS##S+,,,,:,,:::::::::::::::::::::::::::;;;;;;;
+;;;;;;;;;::;:::::::::::::::::::::::::::::,,,:+SSS##SS##S*,,,,,,,,,,,:::,,:::::::::::::;;;;;;;;;;;;;
++++;;;;;;;;;:::::::::::::::::::::::,,,:,,,,,,,?##SS%SSSS?:,,,,,,,,,,,,,,::,,,,:,,:::::::::;;;;;;;;;
+++++;;;;;;;;;;:::::::,::::::::::::::::::,::::,;SSS%%%%SS%?;,,,,,,,,,,,,,,,,,,:,,:,:::::::::::;;;;;;
+;;;;;;;;;;::::::::::::,:::::::,,,:::::::,,,,,,,?#SS%??S#SS*,,,,,,,:,,:,,,,,,,,:::,,::::::::;;;;;;;+
+;;;;;;;;;;::::::::::::,::::::,,,,,,,:,::::,,:,,;SSS%*;*#SS+,,,,,,::,,,,,,,,,,,,,:::::::::::;;;;;;++
++;;;;;;;;;;;:::::::::::,,,,:::,,,,,,,,,:,:,:,,:,::+*+;+?++::,,,,,,,,,,,,,::::,::,::::::;;;;;;;;;;++
+;;;;;;;;;;;;:::::::::::::,:,,:,,::::,,,:,,,,,,,,,,:++;;++;;::,,,:::,,,,,::,,,:::,:::::::;;;;;;;++++
+++;;;;;;;;:::::::::::::::::,::,,:,,,:,,,:,,,,::,,,,:*+;;++;::::::::::::,::,,:,:::::::::::;;;;;;;+++
++++;;+;;;;;;:::::::::::::::,:::::,::,,::,,,,,,:,:,,,+*+;;;;;:::,:,::,,::,,,,,,,::::::::;;;;;;;;;+++
++++;;;;;;;;;;;;;;::::::::::::::::,:,,::,,,,,:,:,,::;+++;;;;;:::,:,,:::,:,::::::::::::;;;;;;;+++++++
+++++;;;;;;;:;++*****+++++;;;;;;;;;;;:::::::::::::;;;;;;;;;++;::,,::::::::::::::::::;;;;;;;;;+++++++
++++;+;;;;;;;:::;+*???????**********++++++++++++;;++++++++++++;::::::::::::::::::::;;+++;;;;;+***+?S
+++;;;;;;;;;;;;;::;;*????????*??????????*????**?*???***+++++++++++++++;;;;;;;;;;;;;;;++++++;;++?%#@@
++++++;;;;;;;;;;:::::;*????????????????*?????*?%%???%%?%*????*????*??*******+++++++++******++*S#@@@@
+++++;+;;;;;;;;::::::::+?????????????%%%%%%%???%%?????%%??%???%%%??%%?%%%%%%%%%%???????**??**%#@@@@@
+++++++;;;;;;;;;;:::::::;????????????????????%????%%%%%%%%%%%SS%%%%SS%%%%%%%%%%%%%%%%%%*???%%%######
++++++++;;;;;;;;;;;;;;:;::;;;;+++****?????????????????????????????%%SS%%%%SSSS%%%%%%%%%**??%%SS#SSSS
+++++++++;;;;;;;;;;;;:::::::::::::::::::;;;;;;++++***??????????????????%%%%%S#S%%%%%%%%%??%%SSSSSSSS
*++++++++;;;;;;;;;;;;;;::;;;:::::::::::::::,,,,,:,,,::::;;;;++++**?????%%%%%%S%%%%%%%%%%%%%SSSSS%%SS