######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
############@#########################################################################################################################################
####x####znxW@##########################################################################################################################@Mxnnz###x@@##
#@#z`      `,*i*nW@################################################################################################################@Wn***,`   `  `z###
##@::;.    .M@@n``,+nW##@#######################################################################################################Wn+,`.z@@M.    `;::W##
##x`:*.  .,`,i+z.    .;n@####################################################################################################@ni,    .n+i,`,.  .i:`x##
##n     :W@n`  `      ``.+x@###############################################################################################x*.`  ` `  ````z@W:     n##
##n     ###x```....``     `;z@########################################################################################@#@z;` ``  ``....```x@##     n##
##n .i. .#+..#W@@@WWn,`:.` `:,zW######################################################################################@z,:```.:`,nW@@@@W+`,##. .i. n@#
@#x`iW+     i##@#####+i@n``.nz.,z@@###############################################################################@#@z,.zx```n@*+#@#@##@#i   ` +Wi`x##
##W. `` `,` :W#####Wz.,+:`zn:ii `,z@##############################################################################@z,``ii:n#`:+..zW###@#W, `.` ```.W##
##@; ``.nMx+`:i++i;,     `W#W: `zz:;x############################################################################x;:zz` :W#@``    ,;i++i,`+xMn.` `:@##
###*`  ,@@#@, .:i*+++*i```n##W.`:M@*`*W#@###################@###############################@##################W*`*@M:`.W##n` `i*+++*i:. ,@##@:   *###
###x` ``*Mz; ;M@######@:  ,M@#+  .#M, ,n@#####@#######@@######################################@W#############@z, ,M+.  ##@M,  :@###@##@M;`;zM*`` `n###
###@. `;:``  n######@xi`;ii;+z* `` `  ``iM###########@,;M@###################################M;,@###########Wi`   ```  in+;ii;`ix@######n ```:;` .@###
####* ;#@i`  ;nnxn#i:` `*@#@n:    ` ;+,` .n@@@@#######Mi.x@#################################x.iM###########n, `,+; ` `  :n@#@*` `:i#nxxz;   ;@#; +@###
####x``#x:   `````       +MWM+` `   .z@xi.`*W##########@M+x@###############################n+M@##########W*``ix@z.     `#MWM*``     ````    ;M#``x@###
####@:  ` :i,    .i+##i`  `,..,,`    `*W#x;`,M####@#######nn@#############################xn@@##########x:`;x@W*`    .,:..,`  `;##+;.`  `.*:``  :@####
#####z`` ;@@W:  *@@###@#`  `#@@@W+.    ,n@@z..z@###########Mx#########################@#@nM##########@@z..z@@z, `  `#@@@@#``  #@###@@* `:W@@:`  z#####
#####@:  i@@@;``x######M`` `;n@@#@#  `  `;x@x.`*@#@#########Mx##########################MM#@######@##@*`.n@x;` ` ``#@@@@n;   `M@#@#@#M``;@@@i `,@#####
######z  `iz;`  i@###@#+`    `.i+i.       `ini `;W@##########MM########################MM#########@#W;  in;`       .i+i.`     +#####@i` `;#i`  z######
######@:    ` .n**@@#@n`      `    .::,,,,````   ,M###########xW######################Wx###########M, ` ````,,.,:,,     `     .n@##@+*z.``    :@######
######@x`     .Wn`:+#i`    ,*+++i;.:W@@@@@@M#;.   .n##########@nW####################Wn###########n. ` .;#M@@@@@@W:.;i+++i,    `;#+: nW.     `n#######
#######@i` +*  :, `       :W######M+;W@##@####M+.` .z@#########Wn###@###############@nW#@####@##@z`  .*M###@#@#@@;+M######W:         ,: `*+` i@#######
########M.`nW,  ` `i+,   `M########@z*##########Mi` `###@#######Mx@################@xM#######@#@#```iW##########+z#@#######x`  `.+i`    .Wn`.M########
##########`,;` .` *@#M.  ;@#########@iM###########z. `#@#########zW#@##############Wz##########+``.z@##########xi@#########@;  `M#@* ````i, z#########
########@@; ` :Wz.W#@#*  ########@#@#xi##@########@M,``+@########@z@##############@z@#########+  :M@###########ix##########@#  +###W`zW:   ;@@########
########@#W,  ,+,,@@@#z  z######@####@iW############W;``+@########xx@#############xx########@+ `:W############W;@###########z  z##@@,,+, `,W@#########
###########n``   `x##@i  #############+n##@##########@;  +@#######@zW############Wz#######@@*` ;@#####@######@n+###########@#  i@##x`   ``n###########
############+`    .i+;`  ;@###########n+##############@;  +########Wz@###########zW#######@* `;@#############@+n##########@@:   ;+i.  ` `+@###########
############@:``     ``  `z##@#@#####@z,x#############@@:``+########nM#########@Wn@######@+` :@@#############x,z@##########z`   ```  `  :@############
############@:  `   ``    `#@@###@Wx*:```iM#############W:``#@######Wz@########@zW@######+` :W#############W*```:*xW@@#@@W#`    ``   `  :@############
############@:`.x. iMxi     .;++*i;;i+#z#i,#@@###########M, `z###@#@#nW######@#Wn####@##z` ,W############@#,i#z#+i;;i*++;.     ixMi`,x.`:@############
#############; `*` ;@Wi     `;#zxW########Mii@@###########M, `n######@z#@####@#zW######n``,M############@iiM########Wxz#;`   ` iW@; `*. i#############
##############`     ..     .x@#############@#i@############M.`.x#####@nM######Mn####@#x.`.x############@i#@#############@x.`   `..   ` `z#############
#############W. `          #@@################*@############x. ,W#####Mn######xW#####W, .x############@iz#############@#@@z   ` ` ` `  .W#############
##############*   `  `:.  .M#################@+#@############x. :W#####z@@#@#@z#####@; .x##############+@#################M.  .:`      +#@############
#############@M. ,` `z@M; :@################@#@iW##@##########x. i@@@##Wn####xW##@#@*`.x######@######W;@##################@: iW@z` `, .M##############
############@##i ;x`,@#@M,,@@################@#i*#@############x.`#####@z@##@n@#####`.x##############*i#################@#@:,W@@@,.n; i###############
###############n``ni`#@@M..M@##@############@@z..x##############x.`n####xM##Mx###@n`.x##@###########x..n@#################M.,M@@#`in``z###############
##############@W` ````.:```z##############@Mn:` ``*x##@##########x..M#@@Wn##nW@#@M..x#############x*`  `;zM@####@#########z  `,.` ````W###############
###############@.  `    ```,W#####@@@WMn+i:..:+zzz+:;n@##@########n`;W##@+##+@##@;`z###########@z;:+zn#+:..:i+nMW@@###@#@W,``` ``  ` .@###############
###############@:       ;nn`,#xnz+i;,,,::i#M@@###@#@n;;z@#@########z`+@@*`  `*@@*`#########@#@z:;n@@####@@M#i::,,,;*+znxz,`nn;`      :@###############
############@###i  ,*` *@@x` ``,+zxMWW@@####@######@##x*;z@########@+`nz`,``,`zn`+@########@z;+x#######@######@WWWMxz+,`  `x#@+ `*,  i@###############
#################` .n, ,zn:  `+@########################W#;z@#######@;:#`i``i`#:;@#######@zi+W@@######################@+`` :nz, ,n`  #@###############
################n   `      ` +#@##########################W+:n######@W.i+,``:+i.W@######n:#W@@##########################+       ``   n################
################W,     `    ,W@##########################@##M:*W######n`z;``iz`n######W*:M#############################@W,          :@################
#################x.   ` `   i################################Wi,z@####@i`;:;;`*@####@n,i@################################;     `  `.x#################
##################z   .:`   i#################################@z,;x####W`...,`M####x;,#@##############################@##i    ;.   z##################
##################z  `n@z` `:###################################W+,ix@#@. `` .@#@xi,+W###################################;  `#@n`` z##################
##################z  `W@#i` .M####################################@zii##` :: `##iiz@###################################@M.  i@@W`  z##################
##################n  `iWz`   *@@#########@Wx#*ii*#M@@################Wn,  i;  ,nW################@@M#*ii*zxW@#########@@i  ``zMi   n@#################
##################M.   ``   ``#@##@##@Mn*,``     ``.:+zxMW@######@#@Wx*` `;;  `*xW#########@WMnn+:.`      ``,+nM###@@###`    ```  .M##################
##################@;          `*M@@M#;.                 .,:;;;;;;;;:,`   `,,  ` `,:;;;;;;;;:,.                 .;+M@@M*`    `     ;@##################
#################### `        ` ````                           ` `          `         `                         ` ``.` `          ####################
###################@,                                         ```,*,              ,*,.```                  `                     .@@##################
####################z``                `.,,,,,.`,:******i**+#zxMMni;z,          ,#iinWMxz+***i******;...,,,,,.`          `      `n####################
####################@*`          ``,*znxMWWWWWMxnzii*znMWWWWMx#i*zW#@:    `     :@#Mz*i#xMWWWWMx#*iizxxMW@@WWMxxz*,`        `  `+@####################
#####################@#,        `iM@############@x,izz#*;:,,:;#W@##@x`..      ..`x##@@W#;:,,:;*#nz*,x#############@xi`       `,#@@####################
#####################@@;       `n#@@############x:x#@####@WW@######@i.x,    ` ,x.i@@#####@WW@######M,x###############x.    `  ;@######################
######################*```;. ` z###############@:x################@#.nW,,`  `,,Wn.##@#####@######@##M:@###############z   `;` `*@#####################
#####################M```z@z` ,W##########@####+z@################z.n#M.n.  .n.M#n.z##@#@#############+###############W,``z@z. `M#####################
###################### `*###``;##############@z;@###############@#.n##z,W,  ,W,z##n.#@###############@:z@#############@:  ##@*` ######################
#####################*``M@z.  .x@####@@@Wxz*i:`n#@#########@###@*,x##@;#W,  ,@#;@##x,*@##@###########@n`;i+zMW@@@####@x. `.z@M``+#####################
###################### `ni`    `:i+*i:,.,:;+Mn:@#@############M::M##@M,WW,  .WW,M###M::M##############@:zM+;:,.,:i***:` `` `in``######################
#####################z` `       `.:*#znxW@###n##############@#.*@####*##x`  `x#zi#@##@*.#@#############+n###@Wxnz+*;.`       `` z#####################
##################@###`` .+`   ,z@@########@@iW######@#####M;,n#####M;@#n    n#@;M####@z,;M############Wi@#@#######@@z,   `+` ``######################
#####################+;* *@:  :W#@##########n*########@@#W*.iW#@###@+n@#*    +@#z+@###@#Wi.+@@#@#######@*n###@########W:  ,@* *;*#####################
####################@:in`*W, :@############@;x#########W#.,z@@@####M*##@;`  `:@#@*M@###@#@n,.zW#@#######x;@@#########@#W: :W*`ni:@####################
####################n`.,``, .M#####@#######+i###@####@#,`*W########iM##ni.  .*x#@M*@#######W*`,#@########i+##########@##M. ,` ,.`n@###################
###################@* .. .* i#############n,W######M#,`.n@########z+#@#in `  n*###+z######@##n. .+M######W,n#@###########i *. .. i####################
###################@:`+* +n`z##########@@#.z###@@ni.`:**####@###@@:M##Mix    xiM@#x:@@########**:`.in@###@z.#@###########z`x* *+ :@###################
#####################``` `i`n#####@#@@#M; :xxn#;.`.ix@zn#########+:@##+#x`   x#+##@:+@########nn@x;.`.i#nxn; ;M###@######n`i. ```z####################
####################M.    `.i#######@Mi,.;i#nzzi,zM@#@#W########x;i##W:Mx`  `xM,W##iix@#######Wz@##Mz,iznnz*;..iM@#@#####i.``   .M####################
####################x` ;, :W,#W@#Wx#ii#M@@###ni+@####@+#######@@;M+@#+i#x`  `x#i###+x;@########+@##@#@+in@##@@M#ii#xW@@W#.M: ,;  n####################
###################@M. zn` :` ,::,:#W###@##WiiM####@#zx#@######+#W##W,n#M.  `M#x,W@#W##########xn#@####MiiW##@###M#:,:;, `: `nz `M####################
######################`:*       `#@#######n:#@######@+@#######Mi@xz@#,@#W.` .W@@,+#zx@iM@######@*@######@#:n#######@#.`      *:`######################
#####################n`    `   `n#@#####@+:M#@#####@xn##@####@*M#znW.###W,;;:W###.Wnz#x*@#######zn########M:+@#######n`` `    ``n#####################
#####################i `;` +*  *@@#####Wi;W#######@@+W@######z###ix+.M##@:;::@##M.+Mi###n@######W+@########W;iW######@*  i*``;` i#####################
#####################;`,W, :*  z######W;i@@########n########Wi@@#;x.i####i;:i####i.x;#@@iM#######zn########@@i:W######z  +; ,W, ;#####################
#####################+`.*`     *#####M:;@#########@*@######@+x##W,+`x####*i**####x`*,W##x+@#####@@*@########@@;:M@@###* `` ` i` +#@###################
#####################n`        `M#@#x,,W######@##@nz@##@###n+###x..;@####n:;n###@@;..x###+n#######nn##########W,,x#@#M`        `n#####################
#####################M`  `  ..  ,zx+``n##########W*@######Wi@@###``n#####W*#@#####n``####WiW@###@#@*@##########z``+xn,  ..    ``M#####################
#######################```+ in` ` `  .@#########@#n######@+n###@: :@@######z@@####@:`,@@##n+@######n###########@.      `n; *` `##@####################
#######################x,.M.`+`      :@#########M;@######x*@###M``z######@@########n``M####*x######@;M#########@;     ``*`.M..x#######################
######################@@i.W,    `    .W########@iz######W:M@###+ :@########@#@#####@, +##@#M:W#@####zi@####@##@@,`   `    ,W,i@#######################
#########################`#.    ;+`  `########@n,W######*+##@#@:`n##@#####@#########n`:@####+*######W,z######@@# ` `+;   `.#`#########################
########################x`  ``, .i`   `*W@@#@W+`;##@####,W##@@n`:@##################@;`n####W,z######;`+W@##@W*` ` `i. ..   `x########################
#########################*` .xW;   .,`  .;**;.  i#####M,+####@;`x@###################n`;@####+.x#####i `.;+*:`` `:.   :WM.  *@########################
#######################@#@+ `+Wx` `:Wx` `    `  i####W,.W####x`i@####################@i`x####W`:W####i  `      `xW:` `xW+``+@#########################
#########################@@i ```  ``,i. `;,    `.x#@x, ;@@##@;.M######################M.;@##@@; ,x@#x.     ,;` `i, `  ``  i@##########################
#########################@@@ni`` ;x*   `#@W,```` .;:`` #####z`+########################+`z#####  `:;. ````,W##`   *x;  `in@###@#######################
#############################@;  ,xW.   ;n#`,M@n.` ``  z#@#x.:@########################@:.x#@#z  `` `.n@M,`#n;   .Wx,  ;@#############################
##############################W;` `:` `;.`   ,zWz ;nn. ;W@z..M##########################M..n@W: .nx; zWz:    .:` `:`  ;W@#############################
#############################@#@zi: ` .nW,   `````+MM,` `.``z#@#######################@##n``..  .MW+`````   ,Mn.`` :*z@#@@############################
#############################@####Wi`  .;.  ix#`` `,..::```#@##############################`  :;.,,`  `#xi  .;`  `*W##@###############################
############################@#######M+i,    `**` +n.,zn; ,z##############################@#z, ;nz,.x* `**`    ,i+M@#@#################################
#######################################W#,`      ;*```.+nM##################################Wn+.```*;`     `.#W#######################################
#########################################Wzi:,;;,..`,iM#@######################################Wi,`..,;;,:in@#########################################
############################################@@##WMxMW############################################WxxMW##@@####@#######################################
#################################################################################################@####################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################