...'''''''''....                                    
                                                                                                                                               ....''''.''...                                   
                                                                                                                       .'':!:'.    ........      .....'''''...                                  
                                                                                                                      ':. ..'^!!:''''':::::!!!:'     .............                              
                                                                                                                     '.     '%0!!......'''':::!!^!'      ...........                            
                                                                                                                     :^!  . .!!:!..........'':!!!!^^:        ............                       
                                                                                                                     .@$@%!!''':'       ..'':''''::!^^'         ............                    
                                                                                                                     .'+X0/::''         .''''''''''::!^:        ................           .... 
                                                              .           ...                                       .'...                 .'':::::''::!^: ..'...........                  ..... 
                                            ...'''^/%/!.     .     .:^/XC00CCCX%%/^!.                               :'....                  .':!!!::::!!+:..!:                                  
        ..''''''                         ...  ......'':!!'.   ..:/C@@@@@00CCCXXXXXX%%/^'                           '''''..                  ..':::::::!!^++'..                                  
     ..     ..':^'                     ...         ...'':!!..!X@$$$@@0000CCCXXXXXXXXX%%%+!.                        :!///^'                     ....'''::!!                                      
'....         .:^!!                   ..             .:+/^!+0$$$@@@@0000CCCCCXXXXXXXX%%%//+^'                      :XX%//^:.                     ....'':!:                                      
...:.         .^$@X'                 ...           .^%C$N0^^/$@@@@@0000CCCCCCXXXXXXX%%%//++++^:                    :0CX%%+^!:.                   ....'::!:.                                     
   +'          .@N$!                 ':... :      !CCC0$B0^//@@@00000000CCCCCXXXX%%%%%%/++^^^^+^:                  .X0CCCX/^+^:                  ...'..''+^:.                                   
   !^..       ..0B0                  '':..'      .CCCCC00X/!X@@00000000CCCCCCXXXXX%%%%%//++^^^^^+^:.....            :00@X%+/^^!!.               ...!+''. '!':                                   
    ':::'!%X%!::/X.                   :''..      .CCC@00%/X^X@000000000CCCCCCCXXXXXX%%%%///+^^^^^^^^!:....           :C000%%/+XX^.....         ....:XX+.  .'.                                   
      ':!^+/+^!:.                     .!:'''':!::'+XC00C%/XX@@0000000000CCCCCCCCCCXXXXXX%%%/+^^^^+//%XX/^:            ./0C/%X+CX/:'....  ........''':^+!::.                 .:::::::'           
                                        :!::+X@B$X^+%0CXXC0@@00000000000000000CCCCCCCCCCXXXX%/++^^/%XXX%%/+!'           !XX////%%+!'''........''''''                      .'':'.'%C^!^.         
                                          '!^^^++^^!%CC00@@@0000000000000000000000000000CCCXX%//+^!^++^^^+++/:            '+CCX%/+/^:''''::::':::'                       .:!.'   '^!'!^         
                                              .''::'/@@@@@@000000000000000000@@@@@@@000CX%%/+++++/^^!!!!^^^!!!.              .!^+//+^:'.''!^^!!.                         :+::'      .'^         
                                                    :0@000000000CCCCCC0000@@@$$@@@00CX%/+^^^^^^^^^^^^^^!^^^:':/+'                  .!^' :..+C/:! .':!::'                  /+C+.     .'.         
                                                     /000000000CCCCCC0000@@$$@@0CX%+^!^+++!:!++++^!!^+^!^^^++//%%^                  X%^! .'..''!.'..!^X^!'                 !+%+:!':''           
                                                     'C000000CCCCCCCCCC00@$@0CX%^!^%0@@00/' .+///+^!:^^^^^^+/%XXXX:                 :XXX:    .'!:''...!!'!                   .'::'.             
                                                      ^0000CCCCCCCCCCCC0@@0CX/!:/$NB$@0CX%///++//+!^!'::!^%0@0X%%/^.                 !X0X:'!':^%/:     .':                                      
                                                      ./CCCCCCCCCCCCCCC000C%/!!CNN$@0CCX%/+++++//+^!!:'''%@@0X%/+^+^                   .''''. .%0B+.'..':.                                      
                                                       .%CCCCCCXXXXCCCCCCCX%+:CNB$@0CX%/++^^+++/%/^!!''':X0CX%/^!^++'                           '!!:::'.                                        
                                                        '%CXXX/+XXXXXXCCCXX%/^C$@0CX%//+^^^^+++/%/^!:''''!XX%+^!!^++.                                                                           
                                                         '/CXX%':^%XXXXXXXX%%/%CCX%%/+^^^^^^+++/%/^!'''''':+^::!!^!.                                                                            
                    ....^/.                               .:+XX^':'^%XXXCXXX%%%%%//+^^^^^^^^++///^:''''''''::!!!!^++:.                                                                          
                  .     ^NX                                ..://:++''+XXXXXXXXX%%/+^^!!!^^^^^^^!:'''''''''''::!!^!!:!!^'                                                                        
                  '.    ./X                               ':..'::'%/'.:/XCCCCXX%%%//+^^!!::::'''''''''':^+///+++^^^!!!!^^.                                                                      
                   :!+C^!^.                                :'.'!:.!X///+^%CCCXX%%///////+^::''''''!^/%%%%%//++^^!!!::!!^^+'                                                                     
                     .'.                                    ....!!'+++CCX+%CXX%%////++++^^!!^+%%%XXXX%%%//++^^!!:::::!!^^^+.                                                                    
                                                              ...:^X%XCCCCCXXX%///+++^^!!!+%XXXXXX%%%%//++^^!!::::::::!!^^^^.                                                                   
                                                                .'/X//XX%XXXX%%//+++^!!:^%XXXXXX%%%%//+++^^!!!::::::::!!!^^+^.                         ....::'.                                 
                                                                 !%!:+X/+/%XX%%//+^^!!^%XXXXX%%%%///++++^^^!!!!::::::::!!!!^^^'                      .:++^+^:!:                    .'::.        
                                       ..'//:                    :%+^/%+^^/X%%%//+^!^%XXXXX%%%////+++++^^^^^!!!!:::::::::!!!!^^.                      ':^:^:.^!                  .:^+/+'        
                                     ..   :$$+                    !%/%%%++/+/%%//+^+XXXXX%%///++++++++++^^^^^^!!!!!!!!!!!!!^^+!                        .^:^:.!!                  '+++/+'        
                                     '.    ^X/                     .^/%%%+!!///////XCXXX%//+++++++++++++++++++^^^!::::::!!!:'.                    .':::.'...                     .!+/%/!..      
                                     :!!%+!+X:                       ...'+:'!/%%%/%CXX%//++++++++++++++++^^!!::'''''::!^!                        .!/+++:     ''::::!^^^'   .!^^+^!'+%X%^::''..  
                                      .:!/!+.           .'''''''.........!%^'^%%%%%XX%/+++^^^!^^^^!!!:::'''''''''::!^^^^'                        .!/+++!   :::'::!++!!^:   '+%%%+!!/XXX/!::::''.
                                                        ''''::''..........^X//%%%%%%%%/+^^!'''::'''''''''''''''::!!^^^:.                         .!/+^^: .^!:.  .'+0X!:!:  '!!!!!!^/XXX/!!!!!:'.
                                                        ''''::'''.........'+XXXXXXX%%/++^!''''!^!:'''''.''''':::!!!^^!                           .!/++/! +/!:  '...^:'^:^'.:::!!^^+/XXX/^!!!:::.
                                            ':''       .:''::!!!'.........''/XXXX%%%%+++^!:!+/+!:'''''''''''::!!!^^+!                             '^^^^' X^^'. . ..::'!::'.::::!!^^^!!!:::::::'.
                                            ::::.''''..!^!:^!^^^!..........''/CXXX%%%/+^!!!!:''''''''''''':::!!!^^^!.                                    %%@0+'...   ..':.'':::::!!!!::''''''.. 
                                      ..    ::...':::'.!!!^+!+!:'..........'':XCXX%%%%/+!::''''''''''''''':::!!!^^:                                      .%0$$/!!'''..''. .'''''::::::::'''.... 
                        ':         ....%%.  '.         ''''!:!:'..........''''^CCCXXX%%//+!:''''''''''''':::!!!^+:                                         '+$CC!!:::'.   .......''''::''''.... 
                           ..''::'':''.!X:             .''':+%%/!'..........'''X00CCXX%%///+^!:''''''''''::!!^^+/!                                            .''''.        ................    
                        .:^^^^!!::::!/%%!             ..'.'.'^CC%X%!........'''^000CCCXX%///++^!!::'::::!!^^^+++//!:.                                             .....       ..                
                     ..!+++^^!:::''.'':!:           ....  ...'^XBM$X+'.....'''':$$000CCXX%%//++^^!!!:::!!!^^^^++//^++.                                           .:!::''.                       
.....................'++/C%^!::'''....':!:..........'..   ..''./0@BC+^'.....'''C##MB$0CCXX%%//++^^^!!!!!!!!!!^^^^^+/%+............................................':::''...........             
....................'^++XX+!::''...  ..':!:........:''.''.  ...:0%+/+!!.......%M######MNB@+^%///++^^^!::^X++^^++////%%+........................................................................ 
''''................:++^^^!::''...    ..'::''''''''!!:::......./$+^/%^!.....'+M#######MMNC''!^+/+++^^^!!+BX++++++///%%%^....................'.'''''''''''''.......'........................'....
'''''''''''''''''''':^^^!!::''..       .'::'''''''':^!:::!^:'.+00X/++/!'''''^N#######MMN$!'''!'':!!^^^^!:X@++++++////%%%!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.
'''''''''''''''''''''!!!::''...        .':''''''''''!+^^X$N%^@$B@X/^%!''..':$########MMM%'''!@+''''':^!!:!@%+++++/////%%/'.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''.
'''''''''''''''''''''':::''....      ...'''''''''''.''^++/@%/BMN@X+^'.''''''/B######MMM$:'''/$@+'''!+^!!!:%C++++++////%%^''''..'''''''..'''''''''':!^!!!^^^!^!:''''''''''''''''''''''''''''''''.
''''''''''''''''''''''''''..  .       ..''''....''''''.':!/+^C00/:''''''.....%MB00@BNNB/''':C$@C^'!//+^!!!!0/+^+++////%/^!:!:::'....''''''....''!^^!'''^++0XCC+/+:'''''''''''''''''''''''''''''.
'''''''''''''''''''.'''''...      .........''''.......'''........'''......':/N##MN@C/+!:'''!@$@0C%%%///++++/+^+++++///+:':::!^+/+!'.....'''''':^!^:....':+0BB0+!//!'...''''''''''''''''''''''''.
'''''''''''''''''''''''''''''.......'''''''......'''''......''''''.'''''!%$NM#######MMN$@CXC$@00CX%%%//++++++^^++++++!''':!''':!^///^:'''..'':X+^+!'.....':!^^!::!^!'''''''''''''''''''''''''''.
'.....''''''''.....''''''.......''''''....''''::::'''::::::::'.......:%BM##M#######MMMNNNBB$@@0CCX%%%///++++++^+++++:'''+@+'':/%%%//%%+:'....%C++++''.....'''':::!!^:....''''''''....''''''''.. 
''''''......'''''''.......''''::::::!!'.^%%%%%%%%%//////++++^!:'...!0M###MM########MMNNNBB$$@@0CXX%%%///++++++^^++^''''!B@:'/000CCX%///%+:'':B$C%+^^+:........'''::!!''''......''''''''.....'''.
....'''''''''.......'''''''.....:':!%%0/+%%%%%!..................!0M####MNM#######MMMNNBBB$$@@0CXX%%%%///+++++^^^:'''''0M@!/$$@0CCXX%%/+//!'!#N$$X@$X+:.........'':::..'''''''.......''''''''...
'''''''........'''''''...''....''.'!CMNNXX%%%%:................'XM###MMNBN########MMMNNBBB$@@0CCXX%%%%/////+++^!''''''^M#MNNB$@@0CCXX%//++/+'0MN#MMMX+^'........''':.........'''''''........'''.
..........''''''........'''.......::!+$M@C%%%%:...............^B####MNBBBM#######MMMNNBBB$$@00CCXX%%%%//////+^!'''''''X##MMNBB$@00CCXX%//++//^$N$$BNX+^:.........'''::''..........'''''''.......
.....'''''............''!:''......^..@BN@%%%%%:..............%M###MNNB$$N########MMMNNBBB$$@00CCXXX%%%%///+^^!::''''':0##MMNNB$@00CCXX%%//+++/^%@C/N$X+:'''''...''....''::''............''''''. 
''''''...........''::'''!!:::''''.^.'CB$C%%%%%'.............%M##MMNBB$@B########MMMNNNBBB$@@00CCXXXX%%//++^^^!::''''':$##MMNNB$$@0CCXXX%%/+++//^'!/X%/!!:::::'''..........'''::''...........'''.
:'''''''''''':'::!::'''':+^!!/C0%^/':$B@%%%%%/'............:N##MMNB$@0@M#######MMMMNNNBB$$@@00CCCXXX%//++++^^^!:'''''!N##MMNNB$$@00CCXX%%//+++//^''':!!!!!!:!:::''''''''''''''::!:::'''''''''''.
.........''::''...........:+++%CX/+!^+@^/%%%%/'............:NMMNBB$@00B########MMMMNNNBB$$@@00CCCCXX%///++++^^!::''''^M##MMNNB$$@00CCXX%//++++///^............':::'................':::''.......
'.''''::::''..''''''''''''''!^^^+!^!^:''/%%%%/'.............CMNB$@@0CB#########MMMMNNNBB$$@@@000CCXX%%////+++^!::''''^N##MMNNB$$@0XX%/+^^^^^^++^^/!''''''''''''''':::''''''''''''''''''':::'''..
.'':''..................''::'...........^/%%%/'.............'0$$@0CX@###########MMMNNNBB$$@@0000CCXX%%%%///++^!!::'''!BMMMNN$@C%+!!::!!!!^^^^++^'''..................'::'..................''::.
::''''''''''''''''''''::::'''''''''''''''':^//'.........''''!C000CX@M###########MMMNNNBB$$@@@@000CCXXXX%%%%%//+^!:::::0MB$C/!:'''''':!!!!^^^^+++^!!'''''''''''''''''''''::::'''''''''''''''''''.