?????????????????????????+++++++++*;-~,,,,,~!+++++++++++++++++??????????????????
?????????????????????+++++++++++++*;-~,,,~-:!*;:!*+++++++++++++++++?????????????
???????????????++++++++++++++????+!:-~,~-:;*+?+-,~;*++++++++++++++++++??????????
?????????????+++++++++++++++?==?+*!:-~~,~-!+==&+:~.~!++++++++++++++++++?????????
???????++++++++++++++++++++====?+*!;:~~~~-;*=&$?!-,,~!++++++++++++++++++++++????
????++++++++++++++++++++++===%==?+*!;-~~~-;*?%&?!-,,~:*+++++++++++++++++++++++++
????+++++++++++++++++++++?%%%%%=?++*!:~-~-::+&%*-~,,~:!+++++++++++++++++++++++++
?+++++++++++++++++++++++?%%%&%%=???+*;;:~~~:+&=;~,.,~:!*++++++++++++++++++++++++
++++++++++++++++++++++++=%&&&%%===??++*;:--~;=?;,,,~-;!*++++++++++++++++++++++++
+++++++++++++++++++++++?%&&&&%%====???+*!!:,,!?!;:::;!*+*+++++++++++++++++++++++
+++++++++++++++++++++++=&&&&%%%%%===??++**:,.-?+******+++***++++++++++++++++++++
++++++++++++++++++++++?%&&%=%========??++!-,',*???+++++?+*****+*++++++++++++++++
++++++++++++++++++++*+=%%=%%%%%%%%%==??+*;~.'.:?????++??+********+++++++++++++++
++++++++++++++**++**+?==%%&$##$$&%====?+*:,''',*?===?????+**********++++++++++++
+++++++++++*********+=%&$$$$$&%%%%%===?+;-~,..,:+==?=??==+*************+++++++++
+++++++++++********+?%$$###$&&&&&$$$%=+!;;*?==?+?=%==???==+***************++++++
++++++++***********?=&$##############$+;;=&&%=?*!?%&?=??==+*****************++++
++++**************+=%&$$####@@@@@@#@##+-:?%$####&?%&%==?=%+*********************
++****************==&$######@@@@$&%%%$*,-:*=%%=%*;=&&$%=?=+*********************
+****************+=%########@$&%=+!!+%*,~~~:!*!:~~*$$&$$%=?*********************
*****************+?%#@####@@#&?+!;;!+%*,~,,,,,,,,~!####$&%?*********************
*****************+?&###@@@@@#&=+*!!*?%!,~~,..,,,~-!$###$&%+*********************
*****************+?&#@@##@#@#$&=+**+=&!~~-~,,~~--;+&$##&=?*!!*!!****************
*************!!***?&#@##$##@@$$&=+++&&+:::-~~--:;!**%#$=++!!!!!!!**!************
*************!!!**=&$#$$&$#@@#$$%???$#$%%:,~--:;;***?%=!!!;;!!!!!!!!!!!!!*******
*************!!!!*?&$$&%&##@@#$$&===&$=+,..,~-:;!+&?!**-:;;;;!!!!!!!!!!!!!!*****
******!**!!!!!!!!++&&%%&$&$#@##$$&%%%=*!:~,~-::;;?=*:;;-::;;;!!!!!!!!!!!!!!!!!**
*****!!!!!!!!!!!!*+&%%%&%%#$@@#$$$&=##$&&%*;::;;!=++--;:--:;;;!!!!!!!!!!!!!!!!!!
***!!!!!!!!!!!!!!*?%%%%==&&%=+++*%??%&%?++!!;;!!?%+!~-!::~~;;!!!!!!!!!!!!!!!!!!!
*!!!!!!!!!!!!!!!!*?%==??+++++*?==$$#$=?+**::;!*?%*:--~**-;~-;!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!+++++++++??=%&&$######$&&%?!::!*?&*::-~-+?;:!:;;!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!*!?+??==%&$$####@@@@##$=*;-~-:;*+==;*!--!++?:-::;!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!*%*&&$$$&$$$$@#$$#@@@@#$%+!:--;+*!%++=*;:!**++-;::;!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!+???=%&&$$&&#$&&#@@@@@@#&=?++?*;!%+%%*!;;;:!+*-!::!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!*?=&$$$&%?&$==#@@@@@@@##$&?*;;?$?%?!!!::;;!*:;;:;!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!++=&$$$%=+=$?=$#@@@@@@@#&=?+?%#@%+!;;:;!---!;!;::!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!+?%&$$&&=?+=??%$#@@@@@@@@#$$$$#$$!:-:!!;:-;!;!;::!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!+=%%$$&&%=?+=++%##@@@@@@@#&%+*+&?!:!!!+;;;!;;;::;!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!+==&&$$&&%?+==*=&#@#$&&=+*;::!?&!***;++!*!!;-::;!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!*=%$%$#$%&?+?=*+%@@$=??+*!;;;+%$*!;!*!+!!**::;?%&$$&&=+!;;!;!!!!!
!!!!!!!!!;;;;;!*?&&%$$#$%?*+=*=%#@$?!**!!;;*=&#=;!++**!!*!;*?=%$$$$$$#=!;;;!!!!!
!!!!!!!!!!;;;;!!+%%%&%$$??**??%%&$$?:;!!!!!+?%%*+!+?;;**!!+*++$$$&&&&&&=!!!;;;;;
!!!!!;;;!!;;!!*?=%&%%=&???*+?=%===%?;;!++!!*?%**&**?::++;*!*;%&&&&&%%%%&=;;;;;;;
;!!;;;;;;;*=&###$%%%%?*?%++++==*?+!:~~:**!!*?=**$=!!;;+!;*;!?%%%%%&%==?%$+;;;;;;
;;;;;;;;;+###$###&=%&++&?+*++??*!+!:~~:!***+?%%!$$*;*!+!!*!===?????+???%$&!;;;;;
;;;;;;;;!=&&&$$##$=&??&?+**+==?*!!*;::;!***+?%$%%#+;?=**!*?%==?*!!!*!?%$$$?;;;;;
;;;;;;;;?%=%$$$###&%=&%+++??%=+*!;;!--:;!***+=$$%#=**$&+*!+???+*!;;+==&$$$&!;;;;
;;;;;;;!%%%$%$####$$&&++*??$#?*!!;;:;::;!!!!+?&$&$$%!+#$+**+++?+!;!%&$$$$$$*;;;;
;;;;;;;?&&$&$@@$#####&*++?$#=*!;;;:::;!!;:;;*+%$$&$$&?*%&++==:*+!;!&$$$$$$$=;;;;
;;;;;;!%$#$$@@@$####$=+?+$#$+!!;::::::!;:::;;*=$$$&&&&%+%=??%%?+!;+$##$$$$$&;;;;
;;;;;;!&@##@@@@$###&==??&##&*!;::::---::::::;!+%$$&&&%&%%&=?=%*!**%$##$$$#$$!;;;
;;;;;;*$@@#@@@@$&#&=$%?&##$?*!;::------:::::::!?$$$&&%%&%%%=????+=$########$+;;;
;;;;;;+#@@#@@@@&##%##%%##$&*!;:::------::::::::*%$$&&%%%%%==???+=%$#######$$?;;;
;;;;;;+$@@@@@@#%#$$##%##$$?!;::---~~~-::;;::::::+&&$&%%%=?==?=?*%&$#@@@@#&$#%;;;
;;;;;;+&#@@#@@$$#$$$$$$$$%!;::---~~~~-:;;;;;;::-;=&$&%%==??==%?+%###@@@#&$##%;;;
;;;;;;?##@@@@@##$$$$$$$$&*;::---~~~,,-:!!!!;::---:+&$%====??%&=?%###@@#$$##$$*;;
;;;;;;=@@@@@@@#$$&&$$$$$*~:----~~~~,,~;***!;::-~.'-=&%?????=%&&=%$#####@@$$$$=;;
;;;;;!%#@@@@#@#$&&$$$$$=~,,---~~~~,,,~!++*!;:-~'`''!%%?*++??%&$%%$#@@@@#$#%?$+;;
;;;;;;=#@@@@###$&&$&$$&-...',~~~~,,,,~+?+!;:-.''```.?%?!!*??=&$&%##@@@###%=$$!;;
;;;;;;=#@@@@@##$%$$$$$*,.'''''.,,,,,,~??*;-.'''`````:==;;!*?=%$$&##@@@@$&$##$!;;
;;;;;;=#@@@@@#$&&$$$$&-..''``'''''...,;-,....'''````.+=*;;!+=%$$&##@@@@@@@#&$%!;
;;;;;;?#@@@@@#$&$$$#$?~,..''```''''''.........''`````;??!!+?=&$$##@@@@@@@#&&$$+;
;;;;;;?#@@@@@#&&$$##$!~,,...''''''''......,,...'''```~=%???=%&$$##@@@@@#$&%%##=;
;;;;;!%#@@@@@@&$####&;-~,,...........,,,,,,,,,,..'''',?&%%%%&$$$##@@@@@##$##$$&;
;;;;;!%#@@@@@@&#####=;:-~~,,,,,,,,,,,,~~~~~~~~,,,...',?&&&&$$$$###@@@@@@##$&=$$!
;;;;;;=#@@@@@@$#@@@#=!:--~~~~,,,,,~~~~~~~---~~~~,,,..,?$$$$$$$####@@@@@@#$&%##$=