************((((((((((((((;;;;;""""^^^^^^:::^::^^::::::::::::':'''::^^^"";;;;;((
*************((((;;;;(((((((;;;;;;;;"""^^^^^^^^^^^^^^^^^::::::::::^^^^^^";;;((((
*(((((((;;"^";;(;;;;(((((2G[;;;;;;;;;;"""""^^^^^^^^^^^^^:^^^^^^^^^^^""";;;((((((
((((****((;;;;;;;;;;((((*Jy2;;;;;;;;;;;;""""""""""^^^^"^:^^^^^^^^^"";;;;;(((((((
(**777777**(((;;(((;;(;*;(;;;;;;;;;;;;;;;;;;;;""""""^^^(;;"^^^^^^""";;;;;((((((;
(77777777777**(((((((;;(G#pC[717((;;;;;;;;;;;;;"""""""""q1;""^^^""";;;;;((((((((
*77777777777**(((;(;;;;;y##c(;;;;;;;;;;;;;;;;;;;;;;;;;""j;;""""";;;;;;;;((((((((
(*77777777777**(((;;;;;;Zp@2";;;;;;;;;;;;;;;;;;;;;;;;;;"C("""";;";;;;;;(((((((((
***7777777777**(((((((;;fpQy;;;;;;;;;;;;;;;;;;;;;;;;;;;;C*;;;"(;";;;;;;(((((((((
*((***((*(((((((((((((;;QfGG;;;;;;;;;;;;;;(((;***;;;;;;;27;;;;;;;^;;";((((((((((
((((((((((;(;;;;((;;;;([GQjZ;;;;;;;;;;;;"^#pp1pJZ(^;;;;;(;;;;;;(.:(;;;;;;;;;;;;;
(**(((**(*7*((((((;(;;;efZeQ;;;;;;;;;;71[77((;(:;"^;;";;.^;;:.;(7(^;";;;;;;;;;((
((**(7BB#Qq#e(((((((((;;^``;;;;;;;;;;;;^:'````` '^""""";.';;[(7"17";";;;;;;;;;;;
((712217(;";;(((((((((;^^:`";;;;;;;;;;^:''````` .:""""";.';;([7^;(:^^";;;;;;;;;;
^((;"^^^^^`'^((((((((;;'`'`";;;;;;;;;;^:'``````..:""""";::y;^^^'"^^;;";;;;;;;;;;
;*;;^^^^^^`.'(((((((;;;'''`^";;;;;;;;;::'````.`..'"""""(':j[***7(^^^:;;;;;^^;;;;
7(7*^;(^;^''^;(((((;;;;``''"^;;;;;;;;^;"''^'.:`..`""";"^.`:^^''`"```:;;;*^``:((;
;;;;^;;:;(:^((;(;^;^^;^```.^"";;;;;;^:^:``^'.:'..'":"""^..:..``'^:'`';;;*^``^;;;
;;;;^^^;^"";;*;(^^^^^":````";;^;;";;''(:'`.^''':`:^:^(7^`'::....``''^'^^"^::^;((
((;(^^^;:::::'''''''^:..````*;;^^^^^^"(^^...`'```'.'`^C .:....````':^^'`':::^(;;
17*^""^;::''''''''`'^"``''^^^("(*77((;^`... '`^^((7jc7*;;;^";(7(7(;^;*727(^'`C7"
(*(((*;('''''''''```;;([27;"^":'^2yC[*'2*`'^:`';1*Zqqc;2;7^"(;("*;'::;("^7C17c;:
^^^^^^^^^^'''''``````.``````''```.. ``.`.^':'..``^(1(::":^:':;':"^`^^^^:'^;^'(^^
;;;;;;;;""^^^^::::^^^^^^^^^^^^^^:'```'``...`"``.."'^J'_.................``````''
;;;;;;;""""^^^^^^^^^^^^^^^^^^^^:^^^^^^::''^^::;::::[[;'`............";777.``````
;;;;"";;""^"^^^^^^^^^^^^^^^^^^^::^^:::''';j((CCC7[e1[7*1[(("........(2Qqf..````^
;;;;;""""""""^":^^^^^^^^:^^::^::::::::':"ce[JcCy72yGZJjee121*1j:7[C;jk##*...````
;;;;"";;""^"""""^"^^^^^^^^:^:::::::'::::2JqyejyQcef@fqfqqcC2cCyc@BB##Bpk#;..````
;;;;"""""^^^^"^"^^^^^^^^^^^^:^^::::::::'2qkyQf@k@Q#k#fZQZyGJqyBBp#BB#BB##Q....``
;;;;;"""""""""^^^^^"^^^^^^^:^^^^:^^:^:^'^fBqpQk#B##pfyJJyyGGpkBBBBBBBkB#fZ.....`
;;;;;;;""""^""^^^"^^"^^^^^^^^^^^^^^^:^:::JBf#k@###k@qGGyJJJkp#BBBBBy;(kk#q'.....
;;;;;;;""^""""^^^^^^"^^^^""^^12^^^^^^^:::(BkBp@#kpk@qZGGqQfj###BBk;`''"Gyj1*(***
;;;";;;;;"""^^^^^^^^^^^^^*Z;^Jy7^^^:^^^:::pkBpp#p#p@#qZqqQ#k#Bkfy^.``'(:*[(ceJyy
;";;";;;""^^^^^^^^^^^""""yqyyZZZGc7;;;;;""7#Bp#k##pp#pQfk##7yBQ@(:::^^':::^^(2ce
;;;;((;;;;;";;;;;;;;;((;*qqqZZGZZZZy2[Cj27[#Bpkk##kpBB#BB#1*qk(q;::^^^^;;;((((*7
7777777******7*7777[[1222yqZqqqqqqZqZqZqZyyk#f@k#####k@kBeeepQe@c7(**7712CCejjjj
@QyyJjjGfQjJJjyyyyGGZZqZqqQQQQqqZZqqZqqqZZZk#ffkB##B#ffqyJJGfJG@yJjjjJyyJyyJJJJJ
QqQ@QZQffk@fQGqGffQq@QqQqqqqQGQZqQk@@f@@@@f##@f#B#@BB#ZyGyyQGG@ZyyyyyJJJJyGyyyJy
@f@f@@ff@@@ffqfQffQqqZQZqZQqQqq@fp@@f@ppfp##k@pk#@###kQf#@ffGy@QyGGyQZZGyZqGyyGG
@ppfffffQfqqfQqQQkffqZQqZQQZZQQ#p@pQQf@@@fk##@#kB##pfQqqqqffQqZfQqZGQQfQqf@QqqZq
@pfQfQfQQQQQQQQqQqqZqZqZkkfQqQpfQqqf@fQ@Qqffk####pQqZGqZQQqqZqZZGqZGf@kp@pp@qqQf