######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
############@#########################################################################################################################################
####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@##########################################################################################@n;` ``  ``....```x@##     n##
##n .i. .#+..#W@@@@Wn,`:.` `:,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++*;,`    `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####@#######xn##############################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,    `;#+:`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########
#########z`,;` .` *@#M.  ;@#########@iM###########z. `#@#########zW#@##############Wn##########+``.z@##########xi@#########@; ``M#@* ````i,`z#########
#########@i ` :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;;i+#z#i,#@@###########M, `z###@#@#nW######@#Wn####@##z` ,W############@#,i#n#+i;;i*++;.`    ixWi`,x.`:@############
#############; .*` ;@Wi     `;#zxW########Mii@@###########M, `n######@z#@####@#z@######n``,M############@iiM########Wxz#;`   ` iW@; `*. i#############
##############`     ..     .x@#############@#i@############M.`.x######nM######Mn####@#x.`.x############@i#@#############@x.`   `..   ` `z#############
#############W. `          #@@################*@############x. ,W#####Wn######xW#####W, .x############@iz#############@#@@z   ` ` ` `  .W#############
##############*   `  `:.  .M##################+#@############x. :W#####z@##@#@z#####@; .x##############+@#################M.  ,:`      +#@############
##############M. ,` `z@M; :@################@#@iW#############x, i@@@##Wn####xW####@*`.x######@######Wi@##################@: iW@z` `, .M##############
############@##i ;x`,@#@W,,@@################@#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``n###############
###############W` ````.:```z##############@Mn:` ``*x#############x..M#@@Wn##nW@##M..x#############x*`  `;zW@##############z  .,.` ````W###############
###############@.  `    ```,W#####@@@@Wn+i:..:+zzn+:;n@##@########n`;W##@+##+@##@;`n###########@z;:+zn#+:..:i+nMW@@###@#@W,``` ``  ` .@###############
###############@:      `;nn`,#xnz+i;,,,::i#M@@###@#@n;;z@##########z`+@@*`  `*@@*`#########@#@z:;n@@####@@M#i::,,,;*+znxz,`nni`      :@###############
################i  ,*` *@#x` ``,+zxMWW@@####@#########M*;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#######x:#W#@##########################+       ``   n################
################W,     `    ,W@##########################@##M:*W######n`z;``iz`n######W*:M#############################@W,         `:@################
#################x.   ` `   i################################@i,z@####@i`;:;;`*@####@n,i@################################;     `  `.x#################
##################z   .:`   i#################################@z,;M####W`...,`M####x;,z@#################################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   x@#################
##################M.   ``   ``####@##@Mn*,``     ``.:+zxMW@######@#@Wx*` `;;  `*xW#########@WMxn+:.`     ```:+nM###@####`    ```  .M##################
##################@;          `*M@@M#;.                 .,:;;;;;;;;:,`   `,,  ` `,:;;;;;;;;:,.`                .;+M@@M*`    `     ;@##################
#################### `        ` `.``                           ` `          `         `                         ` `..` `        ` ####################
###################@,                                         ```,*,              ,*,.````                 `                     .@@##################
####################z``                `.,,,,,.`,;******i**+#zxMMni;z,          ,#iinWMxz+***i******;...,,,,,.`          `      `n####################
####################@*`          ``,*znMWWWWWWMxnzii*znMWWWWMx#i*zW#@:    `     :@#Mz*i#xMWWWWMx#*iizxxMW@@WWMxxz*,`        `  `+@####################
#####################@#,        `iM@#############x,*zz#*;:,,:;#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###W::M##############@:zM+;:,.,:i***:` `` `*n``######################
#####################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########iW##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.z###@@ni.`:**####@###@@:M##Mix    xiM##x:@@########**:`.in@###@z.#@###########z`x* *+ :@###################
#####################``` .i`n#####@####Mi`:xxn#;.`.ix@zn#########+:@##+zx`  `x#+##@:+#########nn@x;.`.i#nxn; ;M##########n`i. ```z####################
####################M.  ` `.i#######@Mi,.;iznzzi,zM@#@#W########x;i##W:Mx`  `xM,@##iix@#######Wz@##Mz,iznnz*;..iM@#@#####i.``   .M####################
####################x` ;,`:W,#W@#@x#ii#M@@###ni+@####@+#######@@;M+##+i#M`  `x#i###+x;@########+@####@+in###@@Mzii#xW@@W#.M: ,;  n####################
###################@M. zn` :` ,::,:#W###@##WiiM######zx#@######+#W##W,n#M.  `M#x,W@#W##########xn#@####MiiW##@###M#:,:;, `: `nz `M####################
######################`:*       `#@#######n:#@######@+@#######Mi@Mz@#,@#W.``.W@@,+#zx@iM@######@*@######@#:n#######@#.`      *:`######################
#####################n`    `   `n#@#####@+:M#@#####@xn##@####@*M#znW.###W,;;:W###.Wnz#x*@#######zn########M:+@#######n`` ``   ``n#####################
#####################i `;. +*  *@@#####Wi;W#######@@+W#######z###*x+.M##@:;::@##M.+Mi###n#######W+@########W;iW######@*  i*`.;` i#####################
#####################;`,W: :*  z######W;i@@########nz#######Wi@@#;x.i####i;:i####i.x;#@@iW#######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##########@*@######Wi@@###``n#####W*#@#####n``####@iW@#####@*@##########z``+xn,` ..    ``M#####################
#######################```+ in` ` `  .@###########n######@+n###@:`:@@######z@@####@:`,@@##n+@######n###########@.`     `n; *` `#######################
#######################M,,M.`+`      :@#########M;@######x*####M``z######@#########n``M####*x######@;M#########@;     ``*`.M..x#######################
######################@@i,W,    ` `  .@########@iz######W:M@###+ :@########@#@#####@, +##@#W:W#@####zi@####@##@@,`   `    ,W,i@#######################
#########################`#. `  ;+`  `########@n,W######*+##@#@:`n##@#####@#########n`:@####+*######W,z######@##`` `+;   `.#`#########################
########################x`  ``, .i`   `*W@@#@@+`;##@####,W###@n`:@##################@;`x####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 ;xn. ;W@z..M##########################M..n@W: .nx; zWz:    .:` `:`  ;W@#############################
#############################@#@zi: ` .nW,   `````+WM,` ..``z#@##########################n``..  ,MW+`````   ,Mn.`` :*z@#@#############################
##################################Wi`  .;.  ix#`` `,..::```################################`  :;.,,`  `#xi  .;`  `*W##@###############################
############################@#######M+i,    `**` +n.,zn; ,z##############################@#z, ;nz,.x+ `**`    ,i+M@#@#################################
#######################################W#,`      i*```.+nM##################################Wn+.```*;`     `.#W#######################################
#########################################Wzi::;;,..`,iM#@######################################Wi,`..,;;,:in@#########################################
############################################@@##WMxMW############################################WxxMW##@@####@#######################################
#################################################################################################@####################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################