/^^^ ^                                                                  /^
/ ^^   ^                                                                /^
^                ^                                                      ^^
^^                                                                      //
 ^                  R@@                                                  /
^                   @#B^                                                 /
 ^  ^^             RBRR                                                  /
^^                 @@@@/                                                 /
^^^                @@@B/
 ^     ^  ^        @@@@/                     /(66OOGeeGeGeeeQeQQS
^   ^  GGeGGGSeO/  @@#@^    ^   eeeSGSeSeSeSeeeSSeSSSQeSGeSSQSQQSQQ
      QSSSQQSSSSSeS@@#@GGGGOOGOOBSeeeSSeeSSSSSSSGSSSeSSSeSQQSSSSSSSQ
     ^QQQSSSQQSS@S^K@@B/~SeC//Q/@eSSeSeSeGeeSSSGSeeeGSSeeeSGGeSSQeSS#
     SSSSSSSeSSSSSSeSSSeSSGGSSeSSSSeeeGGGGGeGeGeGeGSeeeeeeeeGeGeSGeeQ
^^ ^^#SGeeGeSeSSeeeeGeGeeSSeeeGSSQGGGGGGGGOGGGeGGGGGGeeeeGGGGGeeeeeeS@ ^
  ^^ KGSeGSGSGGeSeGOeeGGeGGGeeGeGQGGGOOOOG6OGGGOOGGOGGOGGGGGGeeOGOGGe%@S
^// ^SeGGGeGGGGGQGGOGOGGGOOOOOsGOSOsOOOOs6OO6OOGO66OOOOOGOO6OOsOOGGGG#(//^
/// /eOOOOOOOGO6eGOO6s6ssOO666sO6sG36%%3s63s666C6C666sC66666s6sOOGGeeQO#@/
//^^/SO%C666C%%%SGs6s36%337%%%%3%7Ss7%~((77%CC66C3C3C6366C666O6OGGeSeQ/3@^
////^QG3636C67COQ67%333ttt(t((t77Cee7737%3%CC6s6O6s6OOO6OGOGGOGGGeeGSQ#@@/
/////KS66COOs6sOS6%(t(t((t%3C3COOOeOCC666OOOOOGOGGGGGGOGGGeGGSeeeeeSSQ(@@/
~////GSGOOOGsGGGSGOOOGOOOGGGGGGGeGeeGGGGGGOGGGGOeGeeeGGeSeGeGSeeSSSeQR@@K/
/~~(/6QeGGeeGGeOeeeGGeeeGSeGGGGSGGeGeeGeGGeGeGeGeGGeSeGSeeeeeSQSeQSSQ@@#6(
(((~(3QeeeSeeeOeGQGGeeeGeeGeGGeeGeeGSSGGeGeeSeGeeeSeGSeeeGSSSSSeQSS@@@R#(7
7((((3#SSGeeGeGeGQeGeSeGeSeeSQQQSSSKQQQQSSQSSSSSeSeeSSeSSSSSSQKQ#@@@@@St%t
((((((#QQSeeSSSeS#eeeSeSeSeSQ@BRRRRB@BR@BBB@@RBRRRRBOC%3%6eSGeR@@@@@G6(///
%7(tt%OKKQSQSSSQSRQeSSSeQQQK#@BRR#BRRRRRR#R@RRRBRBR#SGGGS#R@@@@@@#%t(#O%73
C77%t~~##RRRRQ##B%@@@@@@@BRR@@RRRGRBRRsCRKRRORQSGGeSGeQ@@@e@@@@#R#((7G(~//
%(((%%%#@SOeSRRQOG6GOs6%6%sKB@RRR(BRRBK@G@#RB@@#@SB@@B@@@@R////^^/ ///@~(t
7t((C(((3R#SKRSeOOO6Os6CCO6O#@RRR(@RRRR#t#RRB@@R#((~///^/   ^^//(((7(7(@7(
t(37(((t(##RR#KO%%7(~/(~//(//@RRR%@#R#RRR#R#S ^/(/^^^ ^     ^^////(~(%R@C(
C%(t(%((((~~/~(((//^^        @@@@@@@@@@BBB@B     //(((/^^/ ////~(t@@@B@(((