:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::;;::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::;;;::;;;;;;:;:;::::;;::;;;;;;;;::;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;:;::;;;;;;;;:::;;;;:::;;;;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;;;::::::::::::::;::::::::::::::::::;;;;;;;;;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;:;;;;;;;;;:::;:::::::::::::::::::::::::::::::::::;;:;;;:;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::;:::::::::::::;;:::;;;;;;;;
:;;;;;;;;;;;;;;;;;;;;;;;;:::::;::::::::::::::::::::::::;:;;;:;::::::::::::;:::::;;;;;
:;;;;;;;;;;;;;;;;;;;;:::;;;;;;:::::::::::::::::::::::::*xxnz;:::::::::::::;:::::::;;;
:;;;;;;;;;;;;;;;;;;::;::::*#+i::::::::::::::::::::::::+M##xMz::::::::::::::::::::::::
:;;;;;;;;;;;;;;;;;:;;::;;xxzzxni::::::::::::::::::::;*M##+::xi:::::::::::::::::::::::
:;;;;;;;;;:;;;;::::::::;x######x+::::::::::::::::::+*M##z:::*n:::::::::::::::;:::::::
:;;;;;;;;;;;;;;;;;::::;n##nnz###x+:::::::::::::::;n+nz##+::::x:::::::::::::::::::::::
:;;;;;;;;;;;;::::::::;#nn#i;+x###x+:::::::::::::;x+*x##z;::::zi::::::::::::::::::::::
:;;;;;;;;;:;:::::::::;Wxi::::;n###x*:::::::::::+M*:x###z:::::++::::::::::::::::::::::
:;;;;;;;;;:;;::::::::zWi:::::::z###xi::::::::ixMi;#xznnM+*i;:i#::::::::::::::::::::::
:;;;;;;:;:::::::::::;W*::::::::iz###M;:::::;#zxnzz#zMMxn#+*+++x*;::::::::::::::::::::
:;;;;;;;::::::::::::+x::::::::::z####x;::*#z#####zxMMMx#::::::z::::::::::::::::::::::
:;;;;;;:::::::::::::ni::::::::::*z###zxnnz############zMn;::::z::::::::::::::::::::::
:;;:;;;::::::::::::;M::::::::::::z####zn################nW*:::z::::::::::::::::::::::
:;::;::::::::::::::iz::::::::::::######zz#################M+:;z::::::::::::::::::::::
:;:::::::::::::::::++::::::::::::iz########################M*i+::::::::::::::::::::::
:;;;;::::::::::::::z*:::::::::::::z#########################Mz*::::::::::::::::::::::
:::::::::::::::::::ni:::::::::::::z#########################z@i;:;:::::::::::::::::::
:;:::::::::::::::::n;:::::::::::::###########################n+*:*:::::::::::::::::::
:::::::*xn:::::::::n;:::::::::::::############################n+:+:::::::::::::::::::
::::::;x#ni::::::::n;:::::::::::::############################M@#*:::::::::::::::::::
::::::+z#zi::::::::n;:::::::::::::############################znM+:::::::::::::::::::
::::::z##zi:;::::::zi::::::i::::::z############################xnz:::::::::::::::::::
::::::z##n##z+:::::#*::::::+:::::;n############################W#x:::::::::::::::::::
:;zz;;z##znx+z:::::*#::::::**::::#############################x+zM:::::::::::::::::::
:z###*z##z#n#n:::::;n:::::::xi::in##########zxMn#############z:`zM:::::::::::::::::::
:n##zz#######n::::::x:::::::;n##z#############z@Wz############  zM:::::::::::::::::::
:x###n#######z::::::n;:::::::;z#############znnM+Mz##########; `zx:::::::::::::::::::
:x############::::::*#:::::::::z##############zW`.Mz########n. `nz:::::::::::::::::::
:zz##########+:::::::n:::::::::############znxnz` .x########z  ,x*:::::::::::::::::::
:ix#########z*:::::::#i::::::::###########zz####.  .n#######+  ;M::::::::::::::::::::
::x#########ni:::::::;z::::::::+###############+;   ,z##z###i  zn::::::::::::::::::::
::*n########x;::::::::+i:::::::+################+    :z#####:`*M+::::::::::::::::::::
:::z########xz*::::::::z:::::::*#################    ,Wx###z,+Wx;::::::::::::::::::::
:::;n#########zn#;:::::i+::::::iz########zzz####n:   n@#####,Mnn:::::::::::::::::::::
::::in###########nn+::::+i::::::n############z##nn  .@x###+#*xzz+::::::::::::::::::::
:::::+n############zxn+;:#;:::::#################x*,i@zz#i;...:znn#z#++;:::::::::::::
::::::#n##############zxx+xi::::*z###############+Wi+,..,z#*#;,znx*::::;:::::::::::::
:::::::#x################zxMz*;::n###############+n..:,.n#.;M+.:zni::::::::::::::::::
::::::::+M###################znnzzx#####zznzzzzzzMzii:..n###@,.znxi::::::::::::::::::
:::::::::iMz#####################nMMz##z########xn+..,,..iM@;.,#+x##i::::::::::::::::
::::::::::;nn#######################xM########nz*,i#,......:.,z+##::*+;::::::::::::::
::::::::::::+x#######################zMz#####n,....,+*,.....,n#+x:::::i+:::::::::::::
:::::::::::::;xz#######################M######;......,:.....;n+x+:::::::*i:::::::::::
:::::::::::::::#x#######################x######.............*#xz:::::::::i*::::::::::
::::::::::::::::iMn#####################nz#####*...........:xxM*::::::::::;::::::::::
::::::::::::::::::zMz####################xz#####;.........;Wx##z#::::::::::::::::::::
:::::::::::::::::::iMx###################nxxnz##z*......;#x#####zxi::::::::::::::::::
:::::::::::::::::::::+Wx##################n##nxxxWxzzznxn#########x#:::::::::::::::::
::::::::::::::::::::::;nWn################z########################nM*:::::::::::::::
::::::::::::::::::::::::;nWn#########################################xxi:::::::::::::
::::::::::::::::::::::::::inMz########################################zMz::::::::::::
::::::::::::::::::::::::::::;zMz#######z+###############################nM;::::::::::
:::::::::::::::::::::::::::::::#x#####nnn#########z######################zM::::::::::
:::::::::::::::::::::::::::::::::zz###x::z+#####::*#######################zn:::::::::
::::::::::::::::::::::::::::::::::*z###::+#####::::########################Mi::::::::
:::::::::::::::::::::::::::::::::::izz;::;z##z;::::*####zzz################x#::::::::
::::::::::::::::::::::::::::::::::::*z::::#+zi:::::;#####zx@Wn#############x#::::::::
:::::::::::::::::::::::::::::::::::::+::::;+i:::::::#######@##@n###########M#::::::::
::::::::::::::::::::::::::::::::::::ii::::::::::::::+######M###@z##########@i::::::::
::::::::::::::::::::::::::::::::::::+:::::::::::::::+######z###Wz#########nM:::::::::
::::::::::::::::::::::::::::::::::::+:::::::::::::::*#######W@@z##########W;:::::::::
::::::::::::::::::::::::::::::::::::+:::::::::::::::*#######z@x##########x+::::::::::
::::::::::::::::::::::::::::::::::::+:::::::::::::::i########x##########x#:::::::::::
::::::::::::::::::::::::::::::::::::+:::::::::::::::;z#######z#########M#::::::::::::
::::::::::::::::::::::::::::::::::::#::::::::::::::::z######x#########MM:::::::::::::
::::::::::::::::::::::::::::::::::::+::::::::::::::::++####zn#######nx#x;::::::::::::
::::::::::::::::::::::::::::::::::::*;:::::::::::::::i#####x#######nn##zi::::::::::::
::::::::::::::::::::::::::::::::::::;*::::::::::::::::#####xz#######z##xi::::::::::::
:::::::::::::::::::::::::::::::::::::#::::::::::::::::iz###zM##########M:::::::::::::
::::::::::::::::::::::::::::::::::::,z:::::::::::::::::+####zMz#######Mi:::::::::::::
:::::::::::::::::::::::::::::::::::::z::::::::::::::::::+#####xMxzznxxi::::::::::::::
:::::::::::::::::::::::::::::::::::::+*::::::::::::::::::+#######znzzn:::::::::::::::
::::::::::::::::::::::::::::::::::::::n:::::::::::::::::::###########zz::::::::::::::
::::::::::::::::::::::::::::::::::::::n:::::::::::::::::::;###########zz:::::::::::::
::::::::::::::::::::::::::::::::::,,,,++:::::::::::::::::::i###########n#::::::::::::
::::::::::::::::::::::::::::::::::::,,:x::::::::::::::::::::+###########xi:::::::::::
::::::::::::::::::::::::::::::::::,,,,,ni::::::::::::::::::::############M:::::::::::
::::::::::::::::::::::::::::::::::,,,,,in::::::::::::::::::::;###########n#::::::::::
::::::::::::::::::::::::::::::::,,,,,,,:xi::::::::::::::::::::*###########M::::::::::
::::::::::::::::::::::::::::::::,:,,,,,,ix::::::::::::::::::::i###########xi:::::::::
:::::::::::::::::::::::::::::::::::,,,,,,n+:::::::::::::::::::;z##########z+:::::::::
::::::::::::::::::::::::::::::::,:,,,,,,,:M;::::::::::::::::::;z###########z:::::::::
::::::::::::::::::::::::::::::::,,,,,,,,,,*n::::::::::::::::::;z##########zz:::::::::
::::::::::::::::::::::::::::::::,,,,,,,,,,,z*:::::::::::::::::+###########n+:::::::::
::::::::::::::::::::::::::::::::,:,,,,,,,,,:n;::::::::::::::::############x::::::::::
:::::::::::::::::::::::::::::::::::,,,,,,,,,:n;:::::::::::::::z###########x::::::::::
::::::::::::::::::::::::::::::::,:,,,,,,,,,,,:x;:::::::::::::*###########n+::::::::::
::::::::::::::::::::::::::::::::::,,,,,,,,,,,,*Mi::::::::::::z###########M;::::::::::
::::::::::::::::::::::::::::::::::,,,,,,,,,,,,:xz+::::::::::#############n:::::::::::
::::::::::::::::::::::::::::::::::,,,,,,,,,,,,,+z#z+;:::::;#############Mi:::::::::::
::::::::::::::::::::::::::::::::::::,,,,,,,,,,,:x###zzz#zzz############zn::::::::::::
:::::::::::::::::::::::::::::::::::,:,,,,,,,,,,,#######################W;::::::::::::
nnnz+i::::::::::::::::::::::::::::::,:,,,,,,,,,,:x###########zn######zMn:::::::::::::
nnnnnnn#*::::::::::::::::::::::::::::,,,,,,,,,,,,z############zxnnnxMnnxi::::::::::::
nnnnnnnnnn*:::::::::::::::::::::::::::,,,,,,,,,,,in#############MMz#####x::::::::::::
nnnnnnnnnnnn#++*;::::::::::::::::::::::,,,,,,,,:,,x#####################n+:::::::::::
nnnnnnnnnnnnnnnnnz*::::::::::::::::::::,,,,,,,,,,,+n#####################x:::::::::::
nnnnnnnnnnnnnnnnnnnz;::::::::::::::::::,:,,,,,,,,::x#####################W:::::::::::
nnnnnnnnnnnnnnnnnnnnz*;;;:::::::::::::::,,,,,,,,,,,*n####################W:::::::::::
nnnnnnnnnnnnnnnnnnnnnnnnn+;:;:::::::::::::,,::,,,,,:n####################M:::::::::::
nnnnnnnnnnnnnnnnnnnnnnnnnz;::::::::::::::::,::::::,:;x##################nz:::::::::::
nnnnnnnnnnnnnnnnnnnnnnnnnnnnzz#+*ii;::::::::::,,:,,,,#n#################x+:::::::::::
zznnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnz#+*;:::::::::::Wn################W;:::::::::::
::::;i+znnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#::::::::*zMn#######znz####zM::::::::::::
:::::::;+nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#;:::::::x##xMnz#zxWx######x+::::::::::::
::::::::::*#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnz*::::::#z####znz#zx##z####W:::::::::::::
::::::::::::;*#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#i:::::x########znznz####M*:::::::::::::
::::::::::::::::i*#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnz++n###########nz###Mz::::::::::::::
::::::::::::::::::::i*#znnnnnnnnnnnnnnnnnnnnnnnnnnnxn############zx#Mz:::::::::::::::
:::::::::::::::::::::::::i*+#znnnnnnnnnnnnnnnnnnnnnnx#############z@*::::::::::::::::
:::::::::::::::::::::::::::::::i*#nnnnnnnnnnnnnnnnnnM##############xi::::::::::::::::
:::::::::::::::::::::::::::::::::::i*#nnnnnnnnnnnnnnnW#############z#::::::::::::::::
:::::::::::::::::::::::::::::::::::::::;*#znnnnnnnnnnxW#########n###x::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::i*znnnnnnnxWn########x#zx::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::+nnnnnnnnnxMz######xxMi::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::*+#nnnnnnnxMxz##n@n;:::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::;i**++##nxxn#*::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::