It converts image to ASCII art using pre-trained AI models.
When you write the path inside the main.py file, it takes the image and reads. Then it chooses the segmentation according to your choice.
Anime or People Segmentation. These two segmentations' purpose is to extract the background from an image. Then resize the image that you have entered the value. After that process, it grayscales the resized image.
This program is also used a gamma scaler. If the picture is dark, the gamma scaler automatically enlightens the image.
According to gammascaler, it gives each pixel its own ascii characters.(For instance for light pixels "@", for dark pixels ".") You can give this gamma scaler value by hand.
After that process it asks you for do you want to save ascii art in a file. you have to write "yes" or "no". If answer is "yes", It creates a file for you. If "no" it exit from the program.
Step 0 : download required libraries
python -m pip install -r requirements.txt
Step 1 : Enter the image path that you want to make ascii art.
Step 2 : Run the code
python main.py
Step 3 : Select your choices.
Step 4 : Have Fun...
I used mediapipe to segment humans from background. You can check the github link from below.
https://google.github.io/mediapipe/solutions/selfie_segmentation.html
I used zymk9 and koke2c95 あのJfor Yet-Another-Anime-Segmenter model. Their github link is also below.
https://github.com/zymk9/Yet-Another-Anime-Segmenter
You can check the code provided by hysts to better understand how adet and model works.
https://huggingface.co/spaces/hysts/Yet-Another-Anime-Segmenter/tree/main
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................--+++!??XXX?++--++++-+!-............----........................................................................
...............................................................................+!!??XXXXXXXXXXXXXXXX??XXXXXXXXXX$$$$X????$$$$$$$$X$$XXXXXX?++...........................................................
....................................................................!....+?XXXXXXX????????????!!!!!?!!!!!!!!!??????????????X??X????XXXXXX?XX$$&&??+.....................................................
..............................................................-+?XXXX???XX???!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!??????X?????XX?!!X??+-.............................................
............................................................+!X?????!!!!!!!!!!!!!!!!!+!!+++++++++++++++++!!!!!!!!!++!++++++!!!!!!!!!!!!!!!!!!?????????XXXX$X?+!++++-....................................
.......................................................-!?XXXX!!++!+!++++++++++++++++++++++++++++++++++++++++++!!!!!+!!++++-++++!!!!!!!!!!!!!++!!!!!!!!!?????XX$$$&&$X?+................................
..........................................+!!!??$XX???X???!!!!++++++++++++++++++++++++++++++++++++++-++++++++++++!!!!!!!!+++---+++!!!!!!!!!!!!++!!!!!!!!!!!!!!??XXX$$$&$?...............................
........................................+?$XXXXX??X?!!!!!!!+++++++++-++++++++---++++++++++++---++--+++++++++++++++!!!++!!++++--+---++!!!!!!!!!!+++!!!+!!!!!+!!!!!???XXX$$$!.............................
....................................--!X?????????!!!!++++++++++-++-+---++++++++---+-+-++++++++++-----++++++++++++++!!!+++!+++++++-+-++!!!!!!!++++++!+++++++++++!!!!!???XXX$X............................
.................................-+?X?X??!!!!!!!!!+!+++++++!+++--+-+-+--------+++++---++++++++++++++++-----++++-++++++++++!+++++-++---++!!!!++++++++++++!!++++++!!!!!!??XXXX?-..........................
.............................-+!????!?!!!!!!+!!!+++++++++++!++++--+++----------++++++++++++++++++++++++++------+-++++++++++!+++++--+---++++++++++++++++++!+++++++++++!!!???XX?.........................-
..........................-!!!?!!!!!!+!++!!!+!!!!+++++!++++!+++----+++------------++-++++++++++++--+++-+++++----------+++++++++++---+---+++++++++++++++++++++++++++++++!!????X?........................!
.....................---+!!!!!!++++++++++!!++++++++++!+!+++++++-----------------------------++++++---+++--+---------------++++++-----+--+---+--++++-----+++++-+--++++++++!?!??X?-.......................
...................-++++++++++++++++++++!!+++++++++++++++++++-++----+----------.-..-----------------++--+-------------------+------+-------------+--------++++----++++++++!!!?XX?.......................
..................-++++++++-++++--++++++!!+++++++-+++++++-++--------------------....-.-.--------------+-----------.----------+------------------------------+------+--++++!!!!??X-......................
.................++------------++---++++!++++--++-----+-+-------------------..--............-----------------------.--.--.---------------------------------------------+-++!++?XX?......................
...............-!++--------------+---++++++++--------------------------.-----.-..............-----------------------....-...----------------------------------------.-----++++?X$+......................
..............++++-----------------------++---------------------...--...-...---.........-..-..--------------.-----.-......-..------.--.----.-..-..---.--------------..-----+++!?X?......................
............++!++------.----------------------------------------............-..--......-...--...----.-----...-.--...-..........-....-..-............-....--...-.---...-----+-+!?XX-.....................
...........-++++----------.---------------------------------.----..-.............-.-...---..--...-..-..---......--.....-.......-......................................--..--+!!?XX-.....................
..........+++-----------............------------.--------...........-...........-------------..-.-..-..-.-........-...--................................................----+!!????+....................
.........+++---...--------................-------...-...............-...-.......---+----+------------------.---....--...................................................-----+++!!!?!+-................+
........-+------.....----...................-...-........-.--.---...---..----------+++++++++++++++-------------------..-................................................------++++!!!!!+...............+
........+++------..............................-.......---------------------++++++!!!!!!!!!??!!!!!!!!+++++++++++++---------------------................................--.--------++!!!!+..............+
........!!++-----.-.-...........................----------++++++!!!!+++++++!!!!?????????XXXXXXXXXXXX?????!!!!!!!!!!!!!!!!!!++++++++++++-------------..-...................---------++++!!!.............-
........+++++------...........................-----++++!!!!!??????????????XXXXXXXX$$XXXXX$$$$$$$$$$$$$$XXXXXXXXXXXX??XXXXXXXX????????!!++++++++++++---------.............-----------++++!??-............
........+++--------------...................--++++!!!??????XXXXXXXXXX$$$$$$$$$$$&$$$$$$$$&&&&&&&&&&&$&$$$$$$$$$$$$$$$$$$$$$$$$$$$XXXX????????!!!!!!!+++++-----.......-----------------+++!?!............
.......-+-------.------------..............--++!!??XXXXXXX$$$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$&&&&&$$$$$$$$$$$$$XXXXXXX????????!!!!!++++---......------------+----++!!?!...........
.......++----------------------------------+!???XXX$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$X$XXXXXXX????????!!!+++---------------------+++++++!??-..........
.......++-----....------------------------+!?XX$$$$$$$$$$&&&&&&&&&&&&&###&&&&&&&&&&&&#&&&&&&&&&&&&#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$&$$$$$$$$XXXXXXXXXXX?????!!+++----------------------+++++!???+.........
.......++---..-....-..-------------------++?XX$$$$$$$$$$&&&&&&&&&&&&###&##&&#######&####&&&&#&##&&&##&&&&&&&##&&#&&&&&&&&&&&&&&&&&&$$$$$$$$X$XXXXXXXXXXX???!!++-----------------------+++!!!XX?.........
......-+------.....---------------.------+!?X$$$&&$&&$$&&&&&&&&&&&&&&#############&###########&######&#&#&&&#&#&&&&&&&&&&&&&&&&&&&$$$$$$$$$$$XXXXXXXXXXX???!!++------------------------++!!!?$?.........
......++---------------------------------+!?$$$&&$$$$&&&&&&&&&&&&&&&&&&&###########&&&##&#############&&&&&&&#&#&&&&&&&&&&&&&&&&&&&$&$$$$$X$XXXXXXXXXXXXX??!!+--------------------------++!??$X.........
......-+-----.-..-----------------------++!?X$$$&$$$&&&&&&&&&&&&&&&&&&####&###############&##########&#&&&##&#&&&&&&&&&&&&&&&$$&&&$$&$$$$X$XXXXXXXXXXXXX???!!!++-----------------------+++!?XXX.........
.......+------..----------------------+++!?XX$$$$$$&&&&&&&&&&&&&&&&&&&#&&######&&###################&&&&&#&&&&&&&&&&&&&&&&&&&&$$$$$$$$$$$$$XXXXXXXXXXXX?????!!++-----------------+-----++++!?X$.........
.......+-+----.--------------------+++++!??X$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&##&#&&&&&&&&&##&#########&&&&&&&&&&&&&&&&&&&&&$&$$$$$$$$$$$$$$XXXXXXXXXXXXXXX?????!!++-------------------+++++++!?X$!........
.......++++---------------------------++!?XX$$$$$$&$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#&&###&#&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$$$$$$$$X$XXXXXXXXXXXX??????!!++---------------------+++++!?X&?........
.......++!--------............------+++!?X$$$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&#####&&#&#&&#########&#####&&#&&&&&&&&&&&&&&&&&&$$$$$$$$$$$$$$$$XXXXXXXXXXX????????!!++--+------------------+++++?X$&........
........+!+-----.......-....---------+!?X$$$$$$$$$$$&&&&&&&&&&&&&&&&&###&####&&&&&&&##############&###&&#&##&#&&&&&&&&&&&&&&$$$$$$$$$$$$$$X$$XXXXXXXXX?????????!++-------------------++++++!?$$&+.......
........-!++---.........-----------++!??X$$$$$$$$$$$&&&&&&&&&&&&&&&&&&#&##############################&&&&&&##&&&&&&&&&&&&&$&&&&&$$$$$$$$$X$$$$X$XXXXX?????????!++--------------------+++++!!XX$-.......
.........!!+----.-..---------------++!?XX$$$$$$$$$$$$&&&&&&&&&&&&&&&&###################&############&&&&&&&&&&&&&&&&&&&&&&$$$&&$&$$$$$$$$$$$$X$$XXXX?????X?????!++-------------------++++!!?XX?........
.........-!+-----------------------++!?XX$$$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&#####&##&&&&&&&&#######&#&&&&&&&&&#&&&&&##&##&&&&&&&&&&$$$$$$$$$$$$$$$$XXXX?????XX???!++--------------------+++!!?X?.........
..........-+------..----------------+!?XX$$$$&&$$$$$&&&&&&&&&&&&&&&#&#################################&&&&&########&&#&&&&&&&&&&&&$$$$$$$$$$$$$$$$XXXX?????X????!!+--------------------+++!???-.........
...........-+---.-....--.----.....-++!?XX$$&&&&$&$$$&&&&&&&&&&&&&&&&#################################&&&&&&######&&##&#&&&&&&&&&&$$$$$$$$$$$$$$$$$XXX???X???????!!+--------------------+++!??-..........
...........-+---.--.---...........-+!??X$$$&&&&&&$$$&&&&&&&&&&&&&&&&&&##############################&&&&&&##&#&#&#&&#&&#&&&&&&&&&&&&$$$$$$$$$$$$$$XX?????XX????!!++--.-----------------++!!!?-..........
............++----..------....-----!!??XX$$$&&&&&$$$$&&&&&&&&&&&&&&&&&&&#############################&&&&#########&&&&&&&&&&&&&&&&&$$$$$$$$$$$$$$XXX???XXXX?????!!+--...---------------++!!!............
.............+----............---+!!??XXX$$&&&&&&$$&$$&&&&&&&&&&&&&&&&&&&&###################&&&#####&&&&####&&&&&&&&&&&&&&&&$$&&$$$$$$$$$$$$$$$XXX?????XX?????!!!+--.....-------------+!!!-............
.............++---............--++!???XX$$$$&&&&&&&&$&&&&&&&&&#####&&&&&&&&&&&&&&&&&&##&#&&#&&&#&###&&$$&#####&&&&&&&&&&&&&&$$$$$$$$$$$$$$&$$$$$XX??????XX??????!!++--......-----------+!!-.............
.............-+--............--++!???XXX$$$$$&&&&&&&&&&&&&&&&&&######&&&&&&&&&&##&&##&###&&&&&&&&###&&$$&&###&&&&&&$$&&&&&$$$$$$$&&&&&&&&&&$$$$$XX??????????????!!!++--.....-.---------+!!..............
.............-+-----.-......--++!??XXXXX$$$$$$$&&&&&&&&&&&&&&&&&######&&&&&&&&&&&&&&&&&&&&&&&$$&&&&&&&$$&&##&&&&&&$$$&&&&&$&$&&&&&&$&&&&&&&$$$$XXXXXX?XXX????!!!!!!!++---......-------+++!..............
.............-???+---.--------+!!??XXXX$$$$$$$&&&&&&&&&&&&&&&&$&$$&&&&##&&&####&##&&&&&&&&&&&&$&&&&&&&$X$&&&&&$$$&&&&&&&&&&&&&&&&&&&&&&$$XXX$$XXXXXXXXX?X???!!!!!!!!!++--........----++??!..............
............-?!++++--......--++!??XXXX$$$$$$$$&&&&&&&$XX????!!+!!!!!???X$$$$&&&&&#&&&&&&&&&&&$$&&&&&&$XX$&&&&$$$&&&&&&&&$$$X$$$XXXXXX???!!!!+!!?!!?XXXXX????!!!!!!!!!+++---......----++-+!..............
............!+-------......--+!!??XXXX$$$$$$$$$$$$$XX!!+++--------+--++++++!??XXX$$$&&&#&&&&$X$&&&&&&$XX$$&&$$XX$$XXXX??!++++++++-----------+----+++!??????!!!!!!!!!!!+++---.....-----++-++.............
...........-?!++++++-......--+!??XXXX$$$$$$$$$$XX??!!+++++!!+++++++------------+++++!??X$XXXXX$&&&&&&$X?XXXXX?!!?+++++-------------------------------++!!!!!!!!!!!!!!+++++--....---+-+++--+.............
...........-X?!!???+--..--.-+!??XXXXXXX$$$$$$XX???!!!!!!?XXXXXXX?????!+++++-------------+++!!?$&&&&&&&$X??!!+++------------------+++++++!!!!!++---------++!!!!!!!!!!+!+++++--...----+++++-+.............
...........-XX??XX?!+---.---+!??XXXXXX$X$$$$XX?!!??XX$$$$$&&&&&$$$XXX???!!!!!!+++++------++++?$&&&&&$$$XX?!++-------------+--++++!!!???????XX????!!+------+!!!!!!!!!!!+++++--...--++++++++-.............
...........-XX??$$$?!+------+!?XXXXXXX$$$$$XX?!!!?X$$$$$XX??!++----.-...--++!!++!!!!!!!!!!!!?X$&&&&&$$$XX?!!++++++++++++++!!!+------------++!!!???!!!+++--+++!!!!!!!!!!++++--...--++!!!+!+-.............
............?XXX$$X?!+------+?XXXXXXXX$$$$$XX?????XXX?!++++--+-..-+!!-----+!!!!?!!!!!!!??????X$$$$$$$$XXX?!++++!!!!!!+!!!!+++--+!!+----..--------++!!!+++++!!!!!!!!!!!+++!+--..---+++!!!!++.............
............!XXXXX??!--....-+?XXXXXXXX$$$$XXXXXXXX??!-++--+!?X!---...----++X$X?!!!?XXX??????XX$$&&#&&&$$X?!++!!!!!????!++?X$?---.....--+-!?!+--.---++++++!!!!!!!!!!!!!!!++++-..-----+++++!+-............
............+$X?!!+---....--+?XXXXXXXXX$X$$$$XXXX??!+!!+??XX$$$!++++++++!!?$$$X??????X$$$XXXX$$&&#####&$$X!!!!??XX?!!!!!?XX$$!+++---++++!XX?!!++----+++!!!!!????!!!!!!!!!++--..---------+!!+............
............+$XX?+----------+?XXXXXXX$$$$$$$$$$$$$$$XX???!X$$$&$X?!!!!!?X$&$$X??$$$&&&$$&&$$$$&&&#####&&$X!!??XXXXXXX$$$XXXX$$X?!!!!!!?XXXX??!+++++!!!!????????!!!!!!!!!+++--...-------++!!+............
...........-!$$$X!!!++---.--+?XXX$$$$$$$$$$$$$&&&&&$$$$X??!!!????XXXXXXX?????XXXXX$$&&&&&&&&$$&&#######&$X?!?XXX$$$$$$$$XXX???X?X????X???!++++++!!!??????????????!!!!!!++++------------+!!!-............
...........-!$$&$?!!!!+-----+?XX$$$$$$$$$$&&&&&&&&&&&&&$$X????X?????XX??XX?X?XX$&&&&&&&&&&&&$$&&######&&$X?!?XXX$$$$$$$$$$$X????!!!!!+++++++!!!!!??XX????XXXXXX??!!!?!!!!++-...-------+!!!+.............
............!$$&$?!!!!!+----+?XX$$$$$$$$&&&&&&&&&&&&&&&&&$$XXXX????????XXXX$$&&&&&&&&&&&&&&&$$&&&#####&&$X?!?XXX$$$$$$$$$$$$$$$X????!!!!!!!!?????XXX??XXXXX$$XX???!!?!!!!!++-..--+----+!!!-.............
............+X$&$?!!??!!+---!?XX$$$$$$$$&&&&&&&&&&&&&&&&&&&&$$$$$$$$$$$&&&&&&&&&&&&#&&&&&&&&$$&&&#####&&X????XXX$$$$$$$$$$$$$$$$$$$$XXXXXX??XXXXXXXX?XXXX$$$$$XX??!???!!!!!++----+----+!!!..............
.............X$&&X???X?!!+-+?XXX$$$$$$$$&&&&&&&##&&&&&&&&&&&&$$&&&&&&&&&&$$$$&&&&##&&&&&&&&&$$&&&####&&$X?????XXX$$$$$&&$$$$$$$$$$$$$$$$XXXXXXXXXXX?XX$$$$$$$$X???!???!!!!!++----++--++!?!..............
.............?$$&$XXX?X?!++!??XX$$$$$$$$&&&&&&&&&&&&&&&&$$$$$$$$$$$$$$$$$$$$&&&##&&&&&&&&&&&&&&&&####&&$X??????XXX$$$$&$$$$$$$$$$$$$$$$$$$XXXXXXXXXX$$$$$$$$$XX??!?????!!!!!!---+++-++!?!!..............
.............!$$$&$$XXXX?!!!?XXXXX$$$$$$$&&&$&&&&&#&&&&&&&&&&$$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&$&&&####&&$XX??????XXX$$$$$&$$&&$$$$XXXXXXXXXXXXX$$XXX$$&$$$$$$XX???!!?!??!!!???---++++!!??!!..............
.............-X$X$$$$$X????!?XXXXXX$$$$$$$$$&&&&&&&&&#####&&&&&&$$$&&&&&#&&&&&&&&&&&&&&&$$$&&&&&&####&&$X???????XXX$$$$$&$&&&&$$$$$$$$X$XX$$$$$$$$&&&$$$$$XXX????!!!???!?!!??--++++!!!!!!+..............
..............+X$XXX$&$$X?????XXXX$$X$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$&$&&&&&####&&$X????????XX$$$$$$$$$&&&$&$&$$$$$$$$$$&&&$$$$$$$XXXXX???!!!!!????????!+++++!!X?!!!-..............
...............?$$XXX$$$$X?!??XXXXX$$$$$$$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$&&&&&#####&&&$XX???????XX$$$$$$$&&&&&$&&&$$$$$$$$$$$$$$$$XXXXX????!!!!!!!??!???XX++++!!!!!!!!!...............
................X$$$X?XX??XX???XXXXX$$XX$$X$$$$$$$$$$$$$$&&&&&&&&&&&&&&&#&&&&&&&&&&$$XX$$$&&&&&&######&&&$X??!!!!??XXX$$$$$&&&&&&&&&&&&$$$$$$$$$$$XXX?????!!!!!!!!!!!???XXXX+-++++?!!!!?-...............
................!X$$$X?????????XXXXXX$X$X$$X$$$X$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&$$X??XX$X$$&&&&##########&&$X??!!!!!!?X$$$$$$$&$$&$&&$$&&$$$$$$$$XXX???????!!!!!!!!!!!!!?X$$?+++++++!!!?!................
.................!XX$$$$$$XXX?X?XXXXXXXX$X$$$$$$$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&$?!!X$$$$$$$&&&###########&&$X?!?????!!??X$$$$$$$$$&$&$$$$$$$$$$$X$XXX????!!!!!!!!!!!+!!!!X$$!+++++!+!!??-................
..................!XXX$$$$XXX???XXXXXXXXXXXXX$X$$$$$$$$$&&&&&&&&&&&&&&&&&&&$$X!!XX$$$$$$$$$&&##########&&&$X??!?XX????!?XX$$$$$$$$$$$$$$$$$$$$XXXXX?????!!!!!!!!!!!+!?!!X$$++++++++!??+.................
..................-!?XXXXXX??X?XXXXXXXXXXXXXXXXXX$$$$$$$&&&&&&&&&&&&&&&&&$$X?!?$XX$$$$$$$X$&&&&&&&&&&&&&&$$X?!!?????!?X???XX$$$$$$$$$$$$$$$$$XXXXX????!!!!!!!!!!!!!+!!!?X&?--++++++??+..................
....................+!!!?!!!!!XXXXXXXXXXXXXXXX$XXX$$$$$$$&&&&&&&&&&&&&$$$X?!?$$$XXXXXXXXXXXX$$$$$$$$$$$$$X?!+++!!!!!+!?XX???X$$$$$$$$$$$$$$$$XXXX????!!!!!!!!!!!!+++!!!?$&+-----++!!-...................
.....................-++++++++XXXXXXXXXXXXXXXXX$$$$$$$$$$$&&&&&&&&&&$$$XX??X$&$$$?!!!++!!!!!???X????XXX??!+++------+++?XXXX??XX$$$$$$$$$$X$XXXX????!!!!!!!!!!!!!!!!+!!??$$++++++!+......................
..........................---+XXXXXXXXXXXXXXXX$$$$$$$$$$$$$&&&&&&&&$$$X??X$&&&&$$X?+---.----+++!++++!!!++-----..---++!?XXX$$X?XX$$$$$$$$XXXXXXXX??!!!!!!!!!!!!!!!!!!!!?X$X++............................
.............................-?XXXXXXXXXXXXXX$$$$$$$$$$$$$$$$&$$$$$$XX??$&&&&&&&$$$X?!!!!+++++-------------------++!!??XXX$$$XXXX$$$$$$$XXXXXXX???!!!!!!!!!!!!!!!!+!!!?$$?+.............................
..............................!XXXXXXXXXXXXXXX$$$$$$$$$$$$$$$$$$$$$XX?X$&&&&&&&&&&$$$XXXX????!!++---------++++-+++!???XXXX$$$$$X?XX$XX$XXXXXX?????!!!!!!!!!!!!!!!++++!?$$!-.............................
..............................+XX???XXXXXXXXXX$$$$$$$$$$$$$$$$$$$XX??$&&&&&&&&&&&&&$$$$XXXXXX???!+++---++++++++!!!!???XXXX$XX$$$XXXXXXXXXXX?????!!!!!!!!!!!!!!!!!!++!!X$X+..............................
..............................-?X????XXXXXXX$X$$$$$$$$$$$$$$$$$$$XXX&&&&&&&&&&&&&&&$&$$$$X$$$XX??!!+!!!!!!++!!!!!!!??XXXXXXXX$X$$XXXXXXX$XX????!!!!!!!!!!!!!!!!!!!++!?X$?...............................
...............................!X???XXXXXXXXX$$$$$$$$$$$$$$$$$$$XX$&&&&&&&&&&$$&&&$$$XXX!?XX?X!?!!++!!!??!+++!+!!!!??XXXXXXXXXXX$$$$XXX$XXXX??!!!!!!!!!!!!!!!!!!!!++!?X$!...............................
...............................-??????XXXXXXXX$$$$$$$$$$$$$$$$$XX$&&&&&&&&&&&&$$$XXXX?!!!!!??+!!+!++++!!?+-+-+-++++!!!???XXXXXXX$$$$$$XXXXXX??!!!!!!?!!!!!!!!!!!+++!?X$?+...............................
................................+????XXXXXXXX$$$$$$$$$$$$$$$$$$X$&&&&&&&$$$XXX??????!+!!!!+?!++++++!+-+!++----+-++++--+++!?!!XX?XX$XXXXXXXXXX??!?!?!!!?!!!!!!!!+++!!!X$!+...............................
.................................!??????XXXXXX$$$$$$$$$$$$$$$XXX&&&$X$X?!!?+!?!!!!!!++!+!+!?!+++-!?+++++!++!+++-+++------+++++!!!??XXXX??XXXX??!?!?????!!!!!!!+++++!?$?-................................
.................................-!?????XXXXXXXX$$$$$$$$$$$$$$$$$X???!!++++!++++++++++!++?XX!!++++!!+!!?!!+!!+++-+-+-+-------++++++!+!?????XX???!!???!!!!!!!!+!+++!?XX+.................................
.................................-+??????XXXXXXX$$$$$$$$$$$$$XXX?!!?!+-----++-++!!+!!X??X$$$X??????X?X?X$XX???!!!!+++++++---------++++-+?!??X???!???!!!!!!!!!!!+++!X$!-.................................
..................................-!????XXXXXXXX$$$$$$XX$$$$$?X?!!!++----++!!!?????!????!!!!!!?X$$$&$$$$$X?!!!!!!????!!!++---------+++--+!?XX???!!???!!!!!!!!?!+++?$!-..................................
...................................-!!!???XXXXXXX$$$$$XX$$$$$XX?!?++++-+-++++++--------------++++++!++++----------------------------++-+++!XXX??!!????!!!!++!!+++!X?+...................................
....................................-+!!???XXXXXXX$$$$XX$$$$XXX???+++++!!!!!!!!!!!!!!!!!!!!!!!!+++-------+++++++++++++++++++++!!!!++++-++++?X???!!!!?!!!!!+!?++++??+-...................................
.....................................++!!??XXX??XXX$$$$XXX$$XXX??!!!?X$$$$$XXXXXXXXXXXXX$$$$&$$$$$X$?XXXXXXXX???????????!??????????!!+--++!!???!!!!!!!!!!!!!++++!?++....................................
......................................+?!!??XX???XXX$$$XX?XXXXXXX??X$$$$$$$$$$XXXXXXXX$$$$$$$$$$X$XXXXXXXXXX????????!!!???????XX??????+++!!???!!!!!!!!!!!+!++-+!X++.....................................
......................................-?!!!???????XXXXXX?!??XXXXXXX$$$$$$$$$$$$$$??!?!??!?!!!!!!!!!!!!!!!!+!+++-+!++!!?????X?X????????!++!?!+++++!!!!++++!+++!!??!-.....................................
.......................................!??!!???!!!?XXXXX!+!?XXXXXXX$$$$$$$$$$$$$$XX???!++++--------------++----+--+!!???X?X?????!!!!!!!!???!++-+++!!!+++++--+++?!!+.....................................
.......................................+X??!!!!!!!!???X!--+?XXXXXXXXXXXXX$X$$$X$$$$X??!+-+-------------.-------++++!!????????!!!!!!!!!??X??!!+---++++++++--+++!!!+-.....................................
.......................................+X???!!!!!!++!!!+--+!??XXXXXXXXXXXXXXXXXXXXXX??!++++---------.-----------!!!!!!!!?!!!!+++!!!!!?XXX??!+------++++-.-+!++++?+-.....................................
......................................-!?X????++-++++++++-++!?XXXXXXXXXXXXXXXXXXXXXX????!!+++-----------+------+++!!!!!!!!!!++!!????XXXX??!!+-------+--.-+!+++++!+-.....................................
.....................................-!!?XX????!--+-+--+++++!?XXX$$$$$$$XXXXXX?XXXXXXXXXXXXXX?!!!!!?!!!!!!???!!???????????!!??X????XXXX??!!++-------..-+++++++++!+!.....................................
.....................................+++XXX?????!+--------++!??XXX$$$$$$$$$$$$$$$$$&$$&$$$&&$$$$$$$$$$XXXX$$X$X$$XXXXXXXX??XXXX???XXX??!!!++--..------+++++++++++-+!-...................................
..................................-+++-+XXXX?????!++------+++??XXX$$$$$$$$$$$$$$$&&$$&&$$$$$$X$$$$&$XXXXXX$$$?X$$XXXX$$XXXXXXX??XXXX??!!!+++-...-----++++++++++++.-+!+..................................
.................................++++--+XXXXX??X??!!++++----+!??XXXX$$$$$$$$$&&&&&$&$$$XX$$$XX$$$&&$X?X??!XXX!XXXX$XXXXXXXXXX??XXX??!!!!++--....---------+++++++-.--+!+-................................
...............................-+++-++--?XXXXX??XX??!!!!++----+!?XXX$$$$$$$$$$&&$$&$$XX$XXXX?$XXX$&???X?!????!???XXXXXXXXXXXX??XX???!!+++---...---------++++++++-.---++!+...............................
..............................++++---+--??XXXXX??XXX?!!!!!++----+!?XXX$$$$$$$$$$&$&X$XX???!??X$X???!!??!!!X?!!!!?????XXXX?X??????!!!++---....----------+++++++++..----++!+-.............................
...........................--+++--------!??XXXXXXXXXX?!!?!!!!+----!!?XXXX$XX$$$$$XX??!?!!!+!X??!!!?!!?X?!!!!!!!!!!?!!!!?X??????!!++++-....-----------++++++++++-.-----++!!!+............................
.........................-+!+++----------!??XXXXXXXXX????!!!!!!++---+!???XXXXXX??!!!?!?!!!+!?!!!+!!+?!?!!!!!!++++!!+!!!!!?!!!!!!+----...-----------+++++++++++-.....---++!!!!-..........................
......................-+!!+++------------+!???XXXXXX??????!!!!!!!++----!+??!!!!++++!!!!!!+++!!?!++!!?!!++!!+!+++-----++++++++++---...-------------+++++++++++-.......---++++!!!!!-......................
.................-+!!?!+++++--------------+!?XXXXXXXX?????!?!!!!!!!++-------++----+++!++!+-+-+++-++!++++++!+------------.---.......-------------++---++++++--.........----++++!!!!??!+-.................
.............+!???!!+++--++---------------++!?XXXXXXXXX?????!!!!!!!!+++-----------++-++-++-----+-++++----+-+----------.....-.....-------------++++++++++++--............---+++++-++++!????!-............
........-+!??!!++++++++--++-----------------++!?XXXXXXXXX????!!!!!!!!!+++-----------++---------+----+---.------.--.............-------------+---+++++++++-...............-----+--+++++--++!?X?!-........
+---++!??!!+-++-++++++++---------------------++!??XXXXXXXXX????!!!!!!!!+!++++-----.---------------.-------.----....-.......---------------+++++++++++++--.................-------+-+--+-+----+!??!!+-..+
+!!??!!+++-----------++---+--------------------++!??XXXXXXXXX????!!!!!!!!++++++-------------.-.....................-....------------------++++++++++---...................-----------------------+!?X?!!
?!!++-------------------------------------------++!?XXXXXXXXXX???????!!!!!!!!++++++----------.-...............-.....---------------------++-++++++----...................-----------+-+-------------++!X
++---------------------++-------------------------++!??XXXXXXXXX????????!!!!!!!+!++++++-----------------------------------------------+---++++++----.................-..-----.----------++++----------++
+-+-------------------+-++-------------------------+++??XXXXXXXX???????????!!!!!!!!++++++++---------------------------------------------+++++----....................-------.----------------+++++++++++
+++++++---------------------------------------------+++!?XXXXXXXXX??????????????!!!!!!++++++++++-----------------------------------+++++++-++--.....................-------.-----------------------+++++
+++------------------------+--------------------------+-!??XXXXXXXX????????????!!!!!!!!!!+++++++++----------------------------------+++++++--.....................--------.-----------------------------
+-------+------+-----------+-+-------------------------+-!?????XXXXXXX?????????!?!!!!!!!!!!!+++++++++--------------------------------++++--....................---------.-------------------------------
+--+-+-++++-+-++++++-+-++-++-+--------------------------+-!??XX???XXXX?X?????????!!!!!!!!!!!!+++++++-------------------------------+++++--..................-----------.--------------------------------
+-+--+-+-++++++++++++++++++-+++++-------------------------++!??XXX???XX??????????!!!!!!!!!!!!!+++++++++-------------------------+--+++++--..................----------.---------------------------------
--+-+-++-+-+++++++++++++++++++++++-------------------------+!!??XXXXX??????????????!!!!!!!!!!!+++++++++++------------------------++++++-----...-.........-----------.-----------------------------------
-+--+------+-+++++++++++++++++++++++--------------------..-++!?????XXXXXXX???!?????!!!!!!!!!!!!++++++++++-++-+----------------++++++++++-----..-------..-----------------------------------------------+
+--+--------------+-+-+++++++++-+++++------------------..---+!!??XXX?????X?XXX??!!!!!!!!!!!!!!!!!++++++++++++++++---------+-+--++++++++++-----..-----.-------------------------------------------------+
+-+--+-+-------------------+-++-+++++++----------------------+!?????XXX????????????????!!!!!++++++++++++++++++++--+++++--+-----+++++++++----...-..------------------------------------------------------
++++++++-++++-+-------------------+++++++----------------------++!???????????!???????!!!!!!!!!!!!!+++++++++++++++++-+-+++---+++++++++----.--......------------------------------------------------------
++++++++++++++++++++++-++-----------++++++-------------------------+!!??????????!!!!!!!!!!!!!!!!!!!!!!!+!++++++++++++++++++++++++-------.........-------------------------------------------------------
+++++++++++++++++++++++++++++-++---+--+++++++------------------------+++++!!!?????????!!!!!!!!!!!!!!!!!!++++++++++++++++++++----------........--------.-----------------------------------------------++
+!+++++++++++++++++++++++++++++++++++++++++++++-----------------------------+++++++!!!!!!!!!!!!!!!!!!!!!!!+++++++------------------....---.----------------------------------------------------+----+--+
+++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------..-----------------------------------------------------+----+-+--+-++-+
++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------+-+--+-++-+-+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------+-+--+-++-+-+++
++++++++++++++++++++++++++++++++++++++++++++++++-++++++++++----------------------------------------------------------------------------------------------------------------------------+-+--+-+--+-++-++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------+----+--+-+-+--+-+----+-++-+-++-++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-+--------------------------------------------------------------------------------------+----+-+--+-++-+-+--+-+--+-+-++-+-++++-++-++++
---------------------------------------------------------------------------...-------------------------------..-----............----.----.--------------------------------------------------------------
..!??-.-+-+++--+-+++++-!+!!-++-+-+--+++-----++-................................................................................................----++-++++++-+-+.++-++++-+.++!++--!.-+!-++-+--++-++-....
..-++...------..-----------.----.---.---------..................................................................................................---+----+-.-.---.-.-------...---.---.----.-..---..-.....
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................................................................................................................................
........................................................................................................................................................................................................
...................................................................................................................................................--++!!!????XXXXXXX?!++++++--.........................
.........................................................................................................................................-+!?X$&#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$X?!+-...............
.................................................................................................................................-+?X$&#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&XX?+-.......
...........................................................................................................................+!X&#@@@@@@@@@@@@@@@@@@@@@#####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#&$X?!-
.....................................................................................................................-!X$#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#####@@@@#@@@@@@@@@@@@@@@@@@@@@@###@@@@#####@#
.................................................................................................................+?&#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####@@@@###########@@@@@@@@#@@@#############
...................................................................................-!?X$X?++-................-?$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@########&&&&#########@########@@@##########
...................................................................................$@XXXXX!X$$$?-.........+X&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@######&&&&&&&&&&&############################
...................................................................................&@?!!?!-+!!!?XXX?!+-!$#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#####&$$$$$$$$$&&&&####@@@@@@#################
...................................................................................!$$?!!!?!+-+!!??!!$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@######&$XXXXXXXXX$$$$&&###@@@@@@@@@@@@@@@@##&&&&X
......................................................................................!XX!!???!!X!!&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##@@@#######&$X?????X??XXXXXX$$&&&##@@@@@@@@@##@@##&&$$$??X
........................................................................................-???!??XX!+?&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#####&$XX??????????????XXXXX$$&&##@@@@@@@@@@#&&$$$$X!?XX?
...........................................................................................+!?????XX!!?&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$X????????????????????XXX$$&&##@@@@@@@@#&&&$$$??XX????
..........................................................................................+$&?+?????XXX?!?&#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$X???????????????????????XXX$&&#@@@@@@@#&$$$$$??X?!?????
........................................................................................!&@@@#&$?!??????XX?!?&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$???!!?????????????????????XXX$&##@@@@@#&$$$$$X??!!!!!!!!!
......................................................................................?#@@@@@####&X-X$$X???XX!!?&@@@@@@@@@@@@@@@@@@@@@@@@@##&????????????????????????????X$$&#@@@@@@#$$$$$X?!++!!!!!!!!+
...................................................................................-X@@@@@@@@@@@##&??&XX&&X?????!+!?X!@@@@@@@@@@@@@@@@@@@##$!???????????????????????????X$$#@@@@@@#&$$$$X!!+++!!!!!!!+++
.................................................................................-$@@@@@@@@@@@@########&$X$&&X?!!?X$$!$#@@@@@@@@@@@@@@@@##X????????????????????????????X$&########&$$$$?+++++!!!!!!++---
.............................................................XX!+--............+&@@@@@@@@@@@####@@@@@###&&&$$$&#$X!!??!!!X#@@@@@@@@@@@@#&???????????!!??????????!!!!!!!!?!!!!!!!!!+++++--+++!!!!+!+----!
............................................................+@&!!!?$?+--.....-$@@@@@@@@@@@###@@@@@@@@@@@###&&&$X$&#&X?!???!!X&@@@@@@@@&X???????????!!!!!!!!!!!!!!!!!!!?????!?!!!!!++--!+--++++!+++----+!
............................................................+@@$!+++!XX?!??-X@@@@@@@@@@@##@@@@@@@@@@@@@@@@###&&&&$XX$#&$XXXXX??X&@@@@&X?!??!!!!!!!!!!!!!!!!!!!?!!!??X?!XXX?????????XX!?+---++++++----+++
.............................................................-X#&!+++!XX+-?#@@@@@@@@@@##@@@@@@@@@@@@@@@@@@@@@@##&&&&$X??X$$$$XXX!!XXX???!!!!!!!!!!!!!!!!!!!!!!!??X$$$$X!!?$$$$$$$XXXX+?---++++++-----+-+
...............................................................-?&?++!!?+?@@@@@@@@@@###@@@@@@@@@@@@@@@@@@@@@@@@@@##&&$!&$?????XXX$$$$$X??!!!!!!!!!!!!????!???XX$$$$$$$$$$$$$$$$$XXXXX+?+---++++-------++
..................................................................+??+!??!+?&#&&@@####@@@@@@@@@@@@@@@@@@@@@#&$$XX????XXX$$$&&&&$$X?!!X???????????XXXXXXXXX$$$$$$$$$$$$$$$$$$$$$$$$$$X+?+--++++--------++
....................................................................-!!+!??!+?$+?####@@@@@@@@@??$@##&$$XX?!????XXX$&&&$$$$XXXX$$XXX????XXXXXXX$&&&&&&&&&###########&$$$$$$$$$$$$$XXXX+?+.--+++--------++
....................................................................??!$X!!???$$!X$#@@@@@@#&&?!$?!!!???!!!!!!?$!???XXX$$&&&&&&&&&&$X!$$$$XXXXX$$$&#@@@@@@@@@@@@@@@@@#&$$$XX$$$$$X$XXX+++.--++------+--++
..................................................................-&$+X&X?X?!!!!!?!????!!!!???????XX?!!++!!?X$$$&&&&&&&&&&&&&&###&&&?!X$$$&$???XX$$$$&&$$$&@@@@@@@@@@@#$$XX$$$$$XXXXX!!+---+------++-+++
.................................................................!#@@&&#@#??&X?++++!!???XX$$$$X???????X$$$$X??$&&&&&&&############&&?$&&$$X$$$X?????XXX$&$X#@@@@@@##@@@#&$XXXX$$$XXXX?-+----------!+-+++
................................................................X@@#&&$&&#@&?X&#####&X&#&????XX$$&$$$&$&&&&&&&&####################&X###&&$$$$X$XXX??????X??X$&#@@@@@@###&$XXXXXXXXXXX++----------!+---+
..............................................................-&@@##&&$$$$&&$XXXXX$$$X+!X$$$$$&&&&&&&###&#&##########@@#@##########$$####&&&&$$$$XXXXXX?!!!!!!+!X$##@@##@##$$XXXXXXXXX!-+---------+++-+-
.............................................................!@@@@@@@#&&$$$X$$$$$$$$&&$$&&&############$&#######@@@@@@@@###@@@@####X######&&&&&&&$$$$XXX?XX?!++-++!?X&######&$XX??XXXXX?++---------+-+++
............................................................X@@@@@@@@@@##&X&&&&&&##&##&&&#############$####@#@@@@@@@@@@@@@@@@@@@###X#######&#####&&&&$$$$$X????X!+-++!!!?X$&#&$?!??XXXXX?++--------++-++
...........................................................$@@@@@@@@@@@@#$#########&@########@@@#####$####@@@@@@@@@@@@@@@@@@@@@@@@&$@#################&&&$$$$$+?&X!!!+++++--+!+--?X?XXXXX?++-+-++++++-++
.........................................................-#@@@@@@@@@@@@&$@########$@##@@@@@@@@@#####$&####@@@@@@@@@@@@@@@@@@@@@@@#$&@@@@@###############&&&&$$X??XX???!++++++-----+!!XXXXX?++-+--+++++++
........................................................+@@@@@@@@@@@@@&$@########&#@@@@@@@@@@@#####$&#####@@@@@@@@@@@@@@@@@@##@@@#X#@@@@@@#####@@##########&&&$$&&$$XXXX?!!+++---------+++!!+++++-++++++
.......................................................!@@@@@@@#@@@@@#$@@###@@@##&@@@@@@@@@@@#####&$#####@@@@@@@@@@##@@@@@@###@@##X#@@@@@@@##@@@@###@#########&#####&&$$XXXXX?!+----+--+-+++++++++++++++
......................................................!@@@@@@@##@@@@#$@@@@@@@@##$@@@@@@@@@@@######$@#####@@@@@@@@####@@@@@####@@#&X@@@@@@@@@@@@@@@##############@##&######&$$$$$XX??!+++++++++++++++++++
.....................................................!@@#@@@###@@@@#X@@@@@@@@##&#@@@@@@@@@@######$#@###&##@@@@#######@@@@@#&#####$&@@@@@@@@@@@@#@@@@##&&#########&&&##########&&&$$$$$X?++++++++++++++++
....................................................!@@##@#####@@##X#@@@@@@####$@@@@@@@@@#######&$#@##&##############@@@@#&&#####X##@@@@@@@@@@@@@@@@@#&&########&$$################&&$$$?++!?XX?!!++!+++
...................................................!@@&###########$#@@@@@#####&&@@@@@@@@########$##@##&##############@@@##&&#####X##@@@@@@@@@@@@@@###&&#########&X&################&&$$$X!$$&&&$$XXXX?!!
..................................................+@#&&&#########&&###########&@@@@@#@@########&&####&################@##&&&#####X##@@@@@@@@@@##@@@@#&$####@@##&$X#####&#############$XXXX?###&&$$XXXXX?
.................................................+@#&&&&&#######&$##&&#######@&@@@#############X#####&########$##########&######&X###@@@@@@@@@@@@###&&X#######&&X&######&############&$$XX!$#####&$XXXXX
................................................+##&&&######&&##$##&&&######@#&@@#############$&####&@#######&&################&$$####@@@@@@@@@@@@##&&?#@####&&$?########&&##########&$$$X??&#####&&$XXX
..............................................++##&&######&&&&&$&#&#######@@#$@@@############&X####&&@#######$###&#############&X&######@@@@@###@@##&$X####&&&&!&#########&&#########&$$$XX!$#&&#####&$X
.............................................X+&#&&&###&#&&&&&&$#&&#####@@@#&$@@############&$&###&$#@######&&##$&#########&##&&X&##########@@#@###&&?&##&&&&&XX###########$&#########&$$XX??####&&&###&
...........................................-&!$@&&&####&&&&&$$$&#&#####@@@@#&$@@##########@#&$####$$@#######$##&X##########&##&&X##################&&X##&&&&&$?&&###########$&&#######&$$$XX!&&??$&&##&&
..........................................?#?X@&&&#####&&&&$$$$&#&#####@@@@#&$@@###########&&&###&$X@######&$##$X##########$##&&?#################&&?&&&&&&#$!&&&###########&$$&######&$$$XX!XX...-?&&&+
........................................-&@$?@&&&#####&&&&XX$$$&&&####&#@#@#&$@@###########&$####$X$@######$##&$?##&#######X##&&?#################&$X&&&&&&$!!$&&&#########&&&$$&#&&###&$$X??!!......-X.
.......................................?@@#!@#&&&#####&&&$?XXX$#&&###$&###@&&$@###########&&$###&$?&@######X#&$$?##&#######X##&&?&################&?&&&&##&!?X!$&&###########&&$$&#####&$$$X?!+.........
.....................................+&@@#?#@&&&#####&&&&$?XX?&#&&##&X#####&$?@@##########&&&###$??########$&$$$X##&#######X##&#?&############&&#&?&&&&##&??XX?!$&&##########&&&$$&###&&&$$XX!+.........
....................................X@###X&@&&&#####&&&&$?XXX?##&&#&&X#####&$?@@##########&$###&$!X@######$&&$$XX#&$#######X&#&#X&###########&&&&X$&&##&&??XXXX?!$&&######&&##&&&X$&&###&$XX??!.........
..................................?#@###&&@&&&######&&&&$?XXXX##&&#&&?#####&XX#@#########&$&###$??X@######X&$$$??#&X####&##$$###$$##########&&&&$X##&&&&!?XXXXXX!!$&###&######&&&$$$&&&&&$$XX?+.........
................................!#@#####$@#&&######&&&&$?XXXXX##&&#&$?&####&XX$@#########&&&##&$!XX@######$&$$$!?#&X###&&##&X###&X&########&&&&$X&&&&&&!?XXXXXXXX!?$&&&&&&&&##&&&&$X$&&&&$$XXX!.........
..............................!&@######&@#&&&#####&&&&&X?XXXX$#&&&#&$X&###&&?XX@#########$&&##&X?XX@######$&$$X??#&X###&&##&X###&?&#######&&&#&?&&&&&&!?XXX$XXX???!!???XX$$$&&&&&&$$X$&&&$$XXX!.........
............................!&@########@@&&&#&&##&&&&&$?XXXX?X&&&&#&$X$###&&?XX#@#######&$X$#&$?XXX#######$&$$?X?&&?&##&&&#&$$###?&####&#&&##&?&&&&&$!?XXX$$XX?!!!!!!!!???X$$&&&&&&&$XX&&&$$XX!.........
..........................!&@#########@@&&&#&&&#&&&&&&?XXXXXX$#&X?X$$$?###&&?XX$@#######&$!&&&$?XXX##&&&&&$$$$!XX$&X&&#&&$&&$X###X$&#####&&#&X&&&&&X+?XX$$XX??!!!!!!!!!!???X$$&&&&&&$XXX&$$$XX?-........
........................?#@##########@@&&&&&&&&#&&&&&$?XXXXXXX##&&$!!X!&##&&?XXX##&&&&&&&$-&&&$XXXX##&&&&&$$$$!XXX&$$&&&&$&&&X&##$$&###&#&&&X$&&&&?!?X$$$XX??!!!!!!!!!!!???X$$&&&&$$&$XXX$$$XX?+........
.....................-X#@###########@@&&&#&&###&&&&&$?XXXXXXX?##&&&&X?+?$$&&!XXXX@&&&&&&$$!&&&X$XXX&#&&&&$$$$$?XXX&$X&&&&&$&&$$#&&X&&&&&&&&X$&&&&!!XX$$$$XXX???!!!!!!!!!???XX$$&&&&$&$XXXX$$XX?+........
...................!&@#############@@#&#&&&###&&&&&&?XXXXXXXX?&#&&&&$$?!XXXX!?XXX&#&&&&&$XX$&$X$$XXX#&&&&$X$$X?XXX$&X&&&&&X&&&X&&&X&&&&&&&X$&&&$!?X$$$$$$$XX???!!!!!!!!!??XX$&&&&&&$$&$XXXX$X??!........
................+X#@####$?+.?#####@@#&##&&###&&&&&&?XXXXXXXXX?X#&&&&$X??$$XX!????X@&&&&&$?$$&$X&$XXX#&&&&XX$$XX$XX$&$X&&&&$$&&$$&&X$&&&&&$$&&&X!XX$$$$$$$$XXX??????!!!!!!?X$&&&&&&&&$$$$XX??X??!........
.............+X#@@#&X!-.....&####@@#########&&&&&&XXXXXXXXXXXX?#&&&&$X?$?&&$!?????X@&&&$$?&X$$X&&$X?##$$$XX$$XX$XXX&$?&&&&&X&&&$&&&X&&&&$&&&&??X$$&&&&$$$$XXX??????XXX?X?!X$&&&&&&&&&$X$$X?????!!.......
.........-?$##$X!-.........X####@@##########&&&&&XXXXXXXXXXXXX?$&$X$$?!???X??XXX?!?$#$$$$?&$$$X&&$XX$#&$$$XX$X$&$XX$&?$&&&&$$&&$$&&X&&&$&&&$?X$$&&&&&&&$$$$$$XX$$$$$$$XXX?!X$&&&&&&&&&$X$$X????+X.......
......-!??!+..............X@@###@###########&&&&XXXXXXXXXXXX?XX?&&$?!+-++-+.++!?!!XX$&$$$!#$$$X&#&$XX#&$$$XX$$$&$$XX&XX&&&&&X&&&$&&$$&$&&&XX$$&&&&&&&&&&&&&&&&&&&&&&$$$XXX?!XX&&&&&&&&&XX$$????+$!.-!!-.
.........................X@@################&&&XXXXXXXXXXXXX?XX?X&&&$?.......-.----!X$$$$?#&$$X&#&$XX&#$$$X$$$X&&$$$XX$X&&&$XX$X$X$$?$$$$XXX$$$$$$$$$$&&$&$$$$$$$$$$$$$XX??!!XX$&&&&&&&$XX$X!!!+X&&&&&?.
........................X@@#&@#############&&&XXXXXXXXXX?X???????$&$$X--.-$X?!++-----+X$$?##X$X&##&$$$#&$$X#X$X&&$$$X$X$$&&&&X$XXX?$XX$XX$&$$$$$$$$$$$$$$$&$$$$$$$$$$$$$$X??!!?X$&$$&&&&$XXX?!!+X&$$&&$.
.......................X@@#&@##############&&$XXXXXXXXXX?X????????$$$$++-.X&$X?&&$---+-+!?&#$X$$###&$$&&$$X&&XX##&&$$$?&$$&&&&X&&&$$&X$&&##&#############&&&&&&&&&&&&&&$X!XX?!!?X$&&&&&&&X?X?+!+X&&&&&$.
......................$@#&#@##############&&$XXXXXXXXXXX???????????$$$!!+-!###$X#&+X???+--X##X$$#@@#&&&#&$$$@$X#@#####$$&$$$$$$X&&&$$&X&##################&&&&&&&&&&&&&&&$&XX?!+?X$&&&&&$$???!++X&&&&$$-
....................-&@&$@@@#@###########&&$XXXXXXXXXXXX????????????$$X?!++&###&$&!XX$#X?++&@&XX#@@@@##@@@##@@$$@@@@@@@&#######&$&&&&&$X$&&&&!?$&&&&&&####&$X&&&&&&&&&&&&&&&$??!!??X&&&&&$X!!!++$$$$&&&.
...................+##$&@@@@@############&$XXXXXXXXXXXXXX????????????X$?&?!$#####&!XX&&$&X+!#@$X&@@@@@@@@@@@@@@$#@@@@@@@@@@@@@######@@#&$&###X++!X$$$$$$$$$?+?&&&&&&&&&&&&&&&$X?!!??X$&&$$$?!!!-$&&&&&$.
..................!#&X####@#############&$XXXXXXXXXXXXXXX????????????+X?$&X!&@@@@@$X$&###X+&X@@$$@@@@@@@@@@@@@@@##@@@@@@@@@@@@@@@@@@@#&X?!!!+++++++-+++++++---+?XX$&&&&&&&&&&&$X??+???$$$$X?!!!-$&&&&$X.
.................X#X&##################&$XXXXXXXXXXXXXXXXX????????!!!++X?&#&X&@@@@@$##@@@&+#&&@@$#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#&$X!++++++++++++++++---------++++!!???X$?!&&&$X??!!??X$$?!?!!-$$$$&&X.
................XX$###################&$XXXXXXXXXXXXXXXXXX??????!!!!!!+XXX##&$&@@@@@&#@@@@@@@$@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$$$$$X!+!?XX$$$&###&?!??XX?!++++!!+---++++.-X$&&$$X?!!!??X????!+$&&&&$?.
...............?X###################&&XXXXXXXXXXXXXXXXXXXXX?!!+!+!!!!!!!#&$&##&$$#@@@@##@@@@#$#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#$??$#@@########&?XX$#&XXX$$X????+----....-!?X$&$X??!!?????!!-X&&&&$-.
..............!&#&################&&$XXXXXXXXXXXXXXXXXXXX?!++++!!!!!!!!+&###&####&X#@@@@###&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&$$&@@@@@@@@@@@@@&?XX&#$XXX&++&X?X#&?+!+-....--++!?XXX??!!!!???+$$$$$$+.
............-X#&###############&&&&$XXXXXXXXXXXXXXXXXXX?!+++!!!!!!!!!!!!X#########@@@#$&##@#@&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XX$$@#&&&#X-+&X??$#X?!#&$?+-...----+!???!!???!+$&$&&$!.
...........?#&&#############&&&&&&$XX?X?XXXXXXXXXXXXX?!+!++!!!!!!!!!!!!!!#########@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$#@@@@@@@@?-X##$X&#X??@###&&+.-.----+!????!!!!+$$$&$$$.
.........+&#&&&&&######&&&&&&&&&$XX?!?XXXXXXXXXXXX?!++++!+!!!!!!!!!!!!!!-##########@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#&@@@@@@&X?&@@@##?---++!!X$$$$$X??!+!$$$$$&&-
........$#&&&&&&&#&&&&&&&&&&&$$$XX!??XXXXXXXXXXX?+++++!++!!!!!!!!!!!!!!!+&########@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@$$@@@@#?-+!+!?X$$$$$$$$???!!$$$&&$$+
......?#&&&&&&&&&&&&&&&&&&&$$XXX?!??XXXXXXXXXX?!++++++++!!!!!!!!!!!!!!!!-&########@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@##@@@@#?++!!?X$&$$$$$$$$$???+?$$$$$$$X
....+&&$$$$$&&&&&&&&&&&$$$$XXX?!!???XXXXX?XX?++++++++!+!!!!!!!!!!!!!!!!!-&########@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###@@@@@@####@@@@$!!+!?$&&&&&$$$$$$$$X???+?XXX$$$XX
..-$#$$$$$$&&&&&&&&&$$$$XXX???!???X??X?XX?!++++++++++!!!!!!!!!!!!!!!!!!!-&########@@#$&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@##@@@@@@@@@###@@@@#&X+!?X$&&X$&&&&&$$$$XX??!!!!+!???XX???
.?#$$$$$$$$&&&&&&$$$$$XX????!!??????????!++++++++++!!!!!!!!!!!!!!!!!!!!!-$########@X$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#&#@@@@@@@#&X&&$!X$$&&&&&&&&&&&&&&$$X?!!!!!!!!!+!!!??????
&&$$$$$$$$$&&&&$$$$$XX?????!??????????!++++++++++!!!!!!!!!!!!!!!!!!!!!!!+?##########@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####&&&###&$X&&&&&&&$X??!!!!!!!!!!!++!!!!?????
$$$$$$$$$$$$$$$$$$X??????!!?????????!++++++++++!!!!!!!!!!!!!!!!!!!!!!!!!!-#########@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####&$######&&&&&&&X????!!!!!!!!!!!++!!??????!
$$$$$$$$$$$$$$$$X???????!?X????????++++++++++++!!!!!!!!!!!!!!!!!!!!!!!!!!+X########@@#$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@########&$X&&&&&&&&$???????!!!!!!!!+!!!!????!!
$$$$$$$$$$$$$$X????????!XX???????+-++++++++++++++!+++++++!!!!!!!!!!!!!!!!!-$########@@#&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##########&&&&&&&&&&$X?????!!!!!!!!+!!!!????!!
$$$$$$$$$$$XX?????????!$???????!-++++++++++++++++++++++++++!!!!!!!!!!!!!!+++&########@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###########&&&&&&&&&&&$$XX??!!!!!!!!+!!!!?!!!!!
$$$$$$XXXXX?????????!!$??????!++++++++++++++++++++++++++++++!!!!!!!!!!!!!.-++&########@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@############&&&&&&&&&&&$&$$$XX??!!!!!!!!!?!!!!!!
$$XXXX?X???????????!!X?????!+-+--++++++++++++++++++++++++++!+!!!!!!!!!!!!...++$#######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@############&&&&&&&&&&&&$$$$XXXX?????+!????!!!!!!
XXX???????????????+!X?????!-------+++++++++++++++++++++++++!!!!!!!!!!!!!!....++?########@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@############&&&&&&&&&&&&&$$$$XXX??????+??X?????!!!
X??????????????!+.!X?????+----+---++++++++++++++++++++++!!+!!!!!!!!!!!!!!-....-++$#######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@############&&&&&&&&&&&&&&$$$XXXX?????!+???????????
?????????????!-..!X????!------+++--.-++++++++++++++++!+!+!!!!!!!!!!!!!!!!-.......+!&#######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@############&&&&&&&&&&&&&&$$$$XXX??????+!???????????
???????????!-...!X????!---------....+++++++++++++++++++!+!!!!!!!!!!!!!!!!!.........-?&########@@@@##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##############&&&&&&&&&&&&&&$$$$XXX??????!+????????????
?????????!-....+$???!+-------......++++++++++++++++++++++!!!!!!!!!!!!!!!!............-?&#######@@@#XX&#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###############&&&&&&&&&&&&&$$$$$XXX???????+!???????????!
???????!-.....-&?!?!+-----........-++++++++++++++--........---!!!+.....................-!$######@@@@@####@@@#######@@@@@@@@@@@@@@@@@@@@@@@@@################&&&&&&&&&&&&&&&$$$$$XX???????!+???????????!!
?????!-.......$?!!!----...........+++-....-++-............---+--..........................+$#######@@@@@@@@@@@@@@#&$$&@@@@@@@@@@@@@@@@@@@@#################&&&&&&&&&&&&&$$$$$$XX?????????+!??????????!!?
???!-........X??!!--..............--........................................................+$######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@#################&&&&&&&&&&&&&&$$$$$$XX?????????!+??????????!+??
?!-.........!X!!!............................................................................++$######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###################&&&&&&&&&&&&&$$$$$$XX????????????+!?????????!!???
............$!!+.....................................................----+-++++!!???????????????!$######@@@@@@@@@@@@@@@@@@@@@@@@#####################&&&&&&&&&&&$$$$XXX????????????????+!?????????!!??XX
...........X??+......................................................+!?X&##@###&$X?????XXXXXXXXX!?########@@@@@@@@@@@@@@@@@@####################&&&&&&&&&&&$$$XX??????!??????????????+!?????????!!XXXXX
..........+X?+.....................................................-?&@@@@#&&&$$$$X???????XXXXXXXXX?X#########@@@@@@@@@@@@####################&&&&&&&&&&$X??!!!?????!????????????????!+?????????!!XXXXXX
..........$?+....................................................-X#@@@#&&$$$$$$$$X???????XXXXXXXXXXX!?####################################&&&&&&&$X?!!!!!!!?!??????????????????????!+?????????+?X?XXXXX
..........X+....................................................?#@@@#&&&$$$$$$$$$X??????XXXXXXXXXXX?--+X##############################&&&&&$X?!!++++!!?!!?!?!????????????????????!++?????????+?XXX?XXXX
.........X+....................................................X@@@##&&&&&&$$$$$$$X???????XXXXXXX?X?-++--+&#########################&&$X?!++-++++++!!!!!!!??!???????????????!!!+++++????????!!??XXXXXXXX
.........-....................................................X@@@####&&&&&&$$$$$$$????????X?XXX???---++++-?&################&&$X?!++-++-++!+++!!!!!!!!!?!????????????!!!++++++++++????????!?XXXXXXXXXXX
.............................................................?@@@######&&&&&&&$&$$$X?????????X????!-+-+-+++-+$&&&&#&&&$$X?!!++++++++++++-+++++!!!!!!!?!!???????!!!++++++++++++++++????????+?XXXXXXXXXXXX
............................................................!@@@#########&&&&&&&$$$$X?????????????+--+-+++++---+!!++++++++++++++++++++--++++++!!!!!!!???!!!!++++++++++++++++++--+???????!++XXXXXXXXXXXXX
............................................................&@@###########&&&&&&&&&$$X???????????+++-+-++-++++++++++++++++++++++++++++++!+++!+!!!!!?!!!+++++++++++++++++++++++-!???????++-?XXXXXXXXXXXXX
...........................................................?@@#############&&&&&&&&&$$??????????!+-+++---+++++++++++++++++++++++++++++++!!+++!+!!!++++++++++++++++++++++++++++!?X????+-+++XXXXXXXXXXXXXX
..........................................................+#@###$X###########&&&&&&&$$X?????????+-+++-+-++++++++++++++++++++++++++++++++!!!++++++++!+++++++++++++++++++++++++??XX??!+++++!XXXXXXXXXXXXXX
..........................................................&@@###&+X###########&&&&&&&$$X???????!+----+++-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-!?XXXX!+++++++?XXXXXXXXXXXXX?
.........................................................X@@####&$-&###########&&&&&&&$X??????!++---++++++++++++++++++++++++++++++++++!+++++++++++++++++++++++++++++++++-+?XXXX!+++++++-!XXXXXXXXXX?????
........................................................+@@@@@@@&&?!###########&&&&&&&$$X?????!+---++++++++++++++++++++++++++++++++++++++!+++++!++++++++++++++++++++++++!?XX?!++++++++++XX?XXXXX?X??????
........................................................&@@@@@@@&&&+$@##########&&&&&&&$$X??!!++++-+-+-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++!?XX?!++++++++++-!XXX??XX?????????
.......................................................X@@@@@@@@#&&$+#@########&&&&&&&&$$X??!+++----+++++++++++++++++++!+++!++++++++++++++++++++++++++++++++++++++++!?XX?++++++++++++--??????????????!!!
......................................................-#@@@@@@@@####!X@#######&&&&&&&&&$$X??!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++!?XX!++++++++++++---+???????????!!!!!!
......................................................$@@@@@@@@@####$+########&&&&&&&&&&$$??!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++?XX?!++++++--++-+-----??????????!!!!!!++
.....................................................+@@@@@@@@@@#####!$######&&&&&&&&&$$$$??++++++++++++++++-+-++++++++++++++++++++++++++++++++++++++++++++++!??!+++++++++++-+-++----!???????!!!!!!!!+++
.....................................................&@@@@@@@@@@@####$!#####&&&&&&&&$&$$$X?!++++++--++-++++++++++++++++++++++++++++++!++++--+++++++++++++-++!++++++++++++++++--++----?????!!!!!!!!!!++++
....................................................!@@@@@@@@@@@@#####!&###&&&&&&&$$$$$$$?!!+!++++-+-++++++++++++++++++++++++++++++!????+++-++++++++-+++++++++++++++++++++++++-+----!??!!!!!!!!!!!++++++
...................................................-#@@@@@@@@@@@@#####$X###&&&&&$$$$$$$$X??!+++++-++++++++++++++++++++++++++++-+!???????+++++++++++-++++++++++++++++--+-+---+-+----+!?!!!!!!!!!!+++++++-
..................................................+!@@@@@@@@@@@@######&X&#&&&&$$$$$$$$$X???+++!!+++++++++++++++++++++++++++++!!????????!++++++++++++-+++-+++++++++-++++--+---------!!!!!!!!!!!+++++++++-
.................................................+-X@@@@@@@@@@@#######&X&&&&&$$$$$$$$$$????+!+!!+++++++++++++++++++++++++++!???????????++-++-++++++++-++---++-++++----------------!!!!!!!!!!++++++++++++
.......................................+-.......++-&@@@@@@@@@@#######&&$&&&&$$$$$$$$$$X????+!+!!+++++++++++++++++++++++++!?????????????++--+-+++++++++-------+-------------------+!!!!!!+!++++++++++++++
......................................-++-.....-+-+#####@@@@@@######&&&$&&&$$$$$$$$$$X?????+!+!++!+!+++++++++++++-+++++!!!????????????!+++----++++-++++-------------------------+!!!!!!+++++++++++++++++
......................................++-+-...-+--?################&&&??&&$$$$$$$$$$$X????!+!+!!+!+++++++++++-+++++++!!!!!!???????????++!!----+---+--+--------------------------!!!!!!+++++++++++++-+++-
.....................................-+---+-.-++--&###########&&&&&&&X!$$$$$$$$$$$$$X???!!!!!+!!+++++++++++++++++++!!?!!??!???????????++!!-----+--+----------------------------!!!!!!+++++++++++++-+++--
.....................................++----+--+--!##########&&&&&&&$?!X$$$$$$$$$$$$XXX??+!!!!!++++++++++++++++++++!?????????!????????+-+??------------------------------------!!!!!!+++++++++++++-++-++-
.....................................+-------.--.X&&&&#####&&&&&&&$!!XX$$$$$$$$$$$$XXX??+!+++++++++++++!!!++++++!?!?????X?!!!?!?????!--!!!+--------------------.-------------+!!!!!++!++++++++++--++++++
....................................-+--------.--X$&&&&X!!?$&$$$$X+?XXX$$$X$$$$$$$$$$X??!+++!!!!!!!!!!!!!+++++!!!!!???XXXXX?????!!!!!--!!!!---------------------------------+!!!!!!++++++++++++--+++++++
....................................+----------.!XX$$&&-.---+X$$?!XXXXX??XXX$$$$$$$$$X???!!!!!!!!!!!!!!+++++!!!?????XXXXXXXX?!!!!!!!+--!!!!--.-----------------+----++-----+!!!!!!!!++++++++++++++++++++
....................................+-----------!XXX$$?-------!!?XX!+----+?X$$$$$$$$$$??????+!!!!!!!!!!+++!??!????XXXXXXXXXXXX??!!!!--+!!!!+------+++-++++++++++----++----+!!!!!!!++++++++++++++++++++++
...................................-++------+----?XXXX+--------?X!+-----+-+?X$$$$$$$$$XX????!!!!!!!!!++++!!?????XXXXXXXXXXXXXXXX??!+--+!!!!+--.---++++-++++++++++---++---+!!!!!!!!!!++++++++++++++++++++
...................................+++---------+-+???!---++++++++------+-+++?XX$$$$$$$$$XX??!+!!!!!!+++!???!???XXXXXXXXXXXXXXXXXX??---!!!!!!---.---+++++++++++++--------+??!!!!!!!!!++++++++++++++++++++
...................................+++++++-++++++-!!++-++++++++++----++--+++!??X$$$$$$$$$$???!!!!!+++!???????XXXXXXXXXXXXXXXXXXX??!--+!!!!!!+-------++++++++++---------+??!?!!!!!!!!!!+!!++++++++++++!!+
..................................-++++++--++++++++++++++++++++++-++--+++-+++??X$$$$$$$$$$X???!!!+-!???????XXXXXXXXXXXXXXXXXXXXX??+-++!!!!!!!-+-----+++++++++---------+?????!!?!!!!!!!!!++++++++!!!!!!!!
..................................-++++++++++++--+++++++++++++!!++--++-+++-++?XXXX??X$$$$$X?!!!+++??????XXXXXXXXXXX$XXXXXXXXXXXX?!--+!!!!!!!!+-+-----+++++----+-+++--+?????????!!!!!!!!+++++!!!!!!!!!!!!
..................................+++++++++++--+++++++++++!!!!!!??!++++++++-+?!+-----X$$XX?!!+++?XXXXXXX$XXXXXXXXX$$$XXXXXXXXXXX?+-++!!!?!!!!!-+----+-+-----+++++---!????????????!??!++!!!!!!!!!!!!!!!!!
..................................+++++++++--+++++++++!+!!!!!!??!!!!!+-+++--++-------!XXX!!!++!XXXXXXX$$$$$$$$$$$$$$$$$$XXXXXXXX?+++-!!??!!!!!+-+---++++++++++++---!???????????????!+!???!!!!!!!!!!!!!!!
..................................+++++++-+++++++++++!!!!!!!?!!!!!!!!!+++--++-+------+X?!!++!XXXXX$$$+$$$$$$$$$$$$$$$$$$$$XXXXX?+++++!!!?!!!!!!-++++----+++++--+--!???????????????!+??????????!??!!!!!!!
.................................--------++++++++++++++++!!!+++++++++++++-------------!+++-!XXXXXXX$$!$$$$$$$XXXX$$$$XXXXXXXX?X!-++-+++!!!!+++++-+++++++++++-----!!!!?????!????!?++!?????!!!!!!!!!!!!!!.
++++++-........................-!!!!!!!!!!!!!!!!!!!+++-----..............----+X$&#@#$!!XX!+++!!!+----.-------------------------------+X#$$#$!!!+!!!+!!!XXXX$#X?X&@@@@@@@@@@&&&&$$$$$$$&$X??XX!..........
------..........................++++!!!!!!!!!!!++---........--...............---!X&@#+--!X$X!----------+!??!++------------........----+?$XX@@$?!!!!!!!?XXXX?!!X$#@@@@@@@@#&&$XXXXXX$#@#$!....-..........
++-+++-.........................++++++!!!!!!!!!!++-----------------------+++-------??------+X$X!+----+++!!!!?$$X$X!------.-.........----+$&X#@#$!!!!!!XXX?!+X$X#@@@@@@@@#&&$$$$$$$??$@@#?-..............
---------....................--++++++++++!+!!!????!!????!++----------------+!!?????+----------!?$X?++!?!+++++?$&###&&X??!!++---......----?@$X$$$XX??!!?XX?X$XX$##@@@@@##&&&###$?!!!!X#@@&??-!...........
-----------.--------.-.---+!!!!!!!!!!++++++!+!+!!!!!?X$&&&&$$?!++-------.-------++?X$$&#&X?+-----+!X$&##$?!+++++++!??XXXX$$&&&?-.......---##X?XXXXXXX?XX?$&XXXX$@@@@#&&&$&##?!!!!!!!!&@@#X?-............
.......--------+++++++!!!!!!????XXXXX$$$$$XXXX???!!!!!XX&&$#@##&$X?!++-----.-..-.----+!?&#@@#$X!++++++?X$$$?!++-------------++!+-.......--X@$????&$XX$$$&$X$$X$&$XX$X$&&&#$!!!!!!!!!!$@@@&?-...-........
.................-------++++++++!!!!!??XX$$&&####@##&$$X?!!X?&#@@@@#&&$?!+--.--.-.....---+!?$&###&$X!+++++!?X$&&&$$XXX?!++---------.....--+@#XX?X$&&&$X&&$$XX???X&##XX##&?!!!??!!!!!!$@@@#X?-+-+........
............................-------++++!!???XX$$&&##@@@@@@@#&X??$&##@@@@##$!--............---+!?X&#@@##&$$X??!++!??X$&##@@#$!---.---...---+#@&XX$XX?XXX???XXXX$&@@@@#X&X!????????!!!?##@@#$??!-.........
.........................................---++!?XX$$&&&###@@@@@@@#$X?X$$&&&$X+-..............--+!X$&@@@@@@@@@@@##&&$X?!!!!??XX!-----------+$@#&##$XXXXXX$X$&#@@@@@@@#$XXX$$$$XXX??!!?$$$&&$X??!.........
-------+++++++++++!!!!!!!!!++++++-............------+!?XX$&&&###@@@@@@&$??X$&&X+-..............--+!???XXXXX$$&##@@@@@@@@@##&X+------------+?@@@#$$&###@@@@@@@@@@@@@#&XXXXXXX?X$XX???XXX?XX$X???.........
!!!??????!!!!!!!!!!!!!!!!!!!!+?$+................----------+!??X$&&&###@@#$?!?XX!-................--++!!!!????XXX$$&&&&&&###&&?------------+X&#@@@@@@@@@@##&#####&$XXXXX$&#$$#$XXXX?X?????X??X$$&?......
?!+----++++++-----++++++++++----...................--.-----------++!!????X$&&X!+++-..................--------+++!!!++-------!#&+----------+?X$#@@@@&&#&XXXXXXXXXXXXXXXX&@@@@@&XX?XXXXXX?????X#@#X-......
?????+-.........................----+-++++-------....-....------------------+!??!+-..................----+!??XX$$XXXXX?!+----X#!----------+X#&X$$$X??!!X@@@@##@@@@@@@##@@@@@@$$&&&$$$$&$&&&#@@&?-.......
????????!!-........................---++-!!!+??X?X?!+------.-..----.-.........---++--................-+--++!??XX????!+-------+&$+-----------X&$##$?!!++$#######&&#@@@@@@@@@@@##&&&&&&&&&&&###&X-........
????????????!+-...........................---++!!?X$&&$X?!+------.....................................+-....-----++!!?!+-.....-X$!+-----.---!XX$#@&X?!!&&??!!!!!!!??X$&#@@@@@###########&&&&##?.........
????????????????!+---........------.............--+??$&&##&&$X!+----..................................-+......-++!!+-...........-!???!+-----!&#$X$$&@@#@X+--+++!????!+!?&@@@@@@@@@@#########@#!.........
X????????????!!!!+---............--++++---..........--+?$$$$$$&&&&X!+-....................-............-..........--..............-+!???X!--X@@#&$$#@@#X+----+!?XXX?!++$@@@@@@@@@@##&&$$$$&#@$!........!
-------------..........................-++!!+-..........---+?X$&##$$$$?!--................--........................................-+!?+---?@$!?XX$&&X!--+!!!!!??!+-!#@@@@@@@@#&$XXXXXXXXXX&#?+.......!
............................................--+++-..........-.--!X&##&$$!++-..............+-........................................--+-----+&#!++?XX?X-.-----+++++-!&@@@@@##&$XXXXXXXXX????X#&X-......-
.................................................+!+--.........-.-.---+---+-+--...........+-.....--++--..........................-!+-......-+$@&+--!???--..------++??X@@@#$XXXXXXXXXXX?XXXX??$#&+.......
..........................................................................................-....---++!!!+-........................-+-........-?#@X?!+!?+--.-..----+!!?X##X?!??XXXXXXXXXXXX??XXXXX!.......
............................................................................................-!!++++++++--...................................-!$@X?X???$&!---..---+!!???&!-+!??XXXXXXXXXXXXXXX&&&&$......
.................................................................---........................+!?!++-------...................................-+X&XXXX?$#@$?+----+????!!!&!--!?XXX$&####&$$$$#@###&-......
..............................................................----------.....................----------......................................+???X&$&@@&@&+--+????!++++&X!?X$&#@@@@##&$&&&###&&X-.......
..................................................................-------------..............................................-++++-..........-!?!X$&@@@X&@?+!XX?!++++++&####@@@@@@@@#&X$&&&&&#$+........
......-------..............................................................---+++++---....................................-++!!!+!+......---++!!!!!?XXXX#&??X$X+++++++?$#######@@@#&XXXX$$&##$?.........
!!!?!---...................................................................----------++++---............................-??-..-!-..........-???!!++!?X!X#X?X&X!++!!?X$$$XX$$#@@@@&X????XX&@&$$-.........
XXX!+---.................................................................-----------+++++++++++---......................-!??+-.............+??!!!--+!!+X&?X#$?!?X$XX?XXX#@@@#&&X???????X##$$$+..........
XX?++---...............................................................--------++++++++++++++++++++++--...........-!??!+-...-!!............+?!+!!-----+?X?X&X?????XXXXXX$$XX??????XXXXXX??XX+...........
X?++----..............................................................-------++++++++++++++++++++++++++++++-....-!XX?????+....-............+?!!!?----+!!!!!$?????XXX???!!+++!!!!!??????!++..............
?+++---.............................................................-----+++++++++++++++++++++++++++++++++---.-!??XXXXX?++................-+XX???X?+++++++!X?!!!+++------.....--!?X!--+-................
+++---.............................................................-----+++++++++++!!!!!!!!!!!!!!!+++++++++++++!??XXXXXX??....-!..--+++---+!??+++?#$!+++++!!++++--.............-+?X!....................
+-----.............................................................----++++++++++!!!!!!!!!!!!!!!!!!!!!!!++++++++++!!?XXXXX-..+!!!???+!!!!???+-!?!+?#?+++++!!!!+++--............--+?+....................
------...........................................................---++++++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!++++++++++++!!!--+!!+---+!!!!!!!??????!-+?!!!!!!!!!!+++--...........--+?!....................
-----...........................................................---++++++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!++++++++++!!+++++!++----++++++!???!+?????XXXX??!!++-...........--+!!....................
-----..........................................................-----++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!++!+++!++++!!!!!!!!!!!!!!???XXXX$$$$$$$$$$X?!!+-..........-++++....................
---............................................................---------+++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!??XXXX$$$$&&&&&&&&&&&&$X?!+-.........-++++....................
---...........................................................------------------++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!???XX$$$$$&&&&&&&#######&$X?!+.........-++++....................
--............................................................----+++++++++++----..------+++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!????XXX$$$$&&&&&&&#########&&X?!-........--+!+....................
-............................................................-----++++++++!!!!!++++---.......----+++++!!!!!!!!!!!!!!!!!!!!!!!!?????????????XXX$$$$$&&&&&&#########&$X?-........--+!!....................
.............................................................-----++++++++++++++++++!++++----..........-----+++++++!!!!!!!!???????????????????XXXX$$$$$&&&&&&&$$$XX?!!+........--!?-....................
.............................................................-------------+-+++++++++++++++++++++-----........----+++!!!!!?????????????!!!!!+++++++++++++++++++!!!!???!-......--+!-.....................
..............................................................-------------------------------++++!!!!++++++++++++++!!!!!!!?????XXXX????!!+------------------+!!?X$$$X??-.......-?+......................
.................................................................-...........................----+++!!!!!!!!!!!!!!!!!!!!!!????XXXXXXX????!!+++++++++++!!!!!??XXX$$XX???-.......+-.......................
................................................................................................----+++!!!!!!!!!!!!!!!!!!!???X$$$$$$X???????????!!!!!!++++++++!!!!!!!!!-......-!-.......................
+++++++++++---................................................................--.............-.....--++++!!!!!!!!!!!!!!!!!??XX$&##&$X????????!!!+++-----....---------++-.....--!-.......................
++++++++++++++++++---........................................................-++-............-++-....-++++!+++!!!!!!!!!!!!??XX$#@@#$??????!!!++--....................-+......--?-.......................
++++++++++++++++++++++----...................................---------.......................-+++-....-+++++++++++!!!!!!!!??XX$#@@@$????!!!+-............+++-........--.....---?-.......................
-+++++++++++++++++++++++++--..............................----------------------..............---......--+++++++++++!!!!!!??XX$&@@@#??!!!+----...........-!!+--.....---......-++........................
..-+++++++++++++++++++++++--............................----------++++++++++++++++++++++++--+----++++++-+++++++++++!!!!!!!!??X$&#@@@&??!+-+++-...........+!!!!+++-----.......-+-........................
...-++++++++++++++++++++++--............................------+++++++++++++++++++++++++++++++++++++++++++++++++++++!!!!!!!???XX$&#@@@$?!!!++++-----------+!!?!!+----+-......--!+........................
....-+++++++++++++++++++++--............................-----+++++++++++!!!!!!!!!!!!!!!!!!!!!!!!!!+++++++++++++++!!!!!!!!!!???X$&#@@@@&XXXX????!!!!!!!!!+++++++++!!!!-.....---!+........................
.....++++++++++++++++++++---..--..-...................-------+++++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!++!!!!!!!!!!!!!!!???XX$&@@@@@##&&$$$XXXXX???????????X????X!......---?+........................
......++++++++++++++++------..-----..................--------++++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!????X$&#@@@@@@@@#####&&&&&&$$$$$$$$$$$XX$?......--+!.........................
......-++++++++++++++-------.-------.................--------+++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!???XX$&#@@@@@@@@@@@@@@#############&&$$$X-....---!!.........................
.......+++++++++++++--------.--.--+-.................--------+++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!????X$&##@@@@@@@@@@@@@@@@@@@@#######&&$$$+.--.---!-.........................
.......-++++++++++++-------------++-................---------+++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!??X$&&#@@@@@@@@@@@@@@@@@@@@@@######&&$$+.------!..........................
........+++++++++++++------------++-................---------+++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!??X$&&##@@@@@@@@@@@@@@@@@@@@@#####&&$&!.-----+!..........................
........-++++++++++++++----------++-...............----------+++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!???X$$&#@@@@###@@@@@@@@@@@@@#######&&&?------!?..........................
.........-+!++++++++++++++-------+++-..............---------++++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!????XX$&###########@@@@@@@#########&&&?.-----??..........................
...........-++!++++++++++++------+++-..............---------+++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!??????XX$&&########################&&&!.----+?-..........................
..............--+!++++++++++----++++-..............---------+++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!????????????XX$$&##&#####################&$+.----+-...........................
..................-+++++++++++++++++-..............---------++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!????????????????XXXX$&&&&&&#################&&X------!............................
.....................-+++++++++++++++-............----------++++++!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!??!+++++++!??????X???XX&#&&&&&################&&?------?............................
.......................-+!+++++-...-+-............----------+++++!!!!!!!!!!!!!!!!!!!!!!?????????????????!!!!!!!!!!!!!!!++!!!!!!????X?!!!XX$###&&&&&&&#############&$+-----+?............................
.........................-+!+++++..---............-----+----+++++!!!!!!!!!!!!!!!!!!!!???????????????????!!!!!!!!!!!!!!!!!!!!!?????X???XXX$#####&&&&&&&&##########&&?------+X............................
...........................+!!!++-..---...........---+++---+++++!!!!!!!!!!!!!!!!!!!!?????????????????????!!!!!!!!!!!!!!!!!!!?????XX$&#@@@########&&&&&&&&##&&##&&&X-------!!............................
............................--++++..---...........---+++---+++++!!!!!!!!!!!!!!!!!!!!????????????????????!!!!!!!!!!!!!!!!!????XXXXXX$&#@@@@@#######&&&&&&&&&#&#&&&$+------++.............................
....................................----..........--++++---++++!!!!!!!!!!!!!!!!!!!!???????????????????????!??!!!!!!!!?????X$$$$XXXXX$&#############&&&&&&&&&&&&&$!-------!-.............................
....................................-----........---+++++--++++!!!!!!!!!!!!!!!!!!!???????????????????????????????????????X$&##&&$$$$$&###############&&&&&&&&#&$?+-------?-.............................
.....................................-----....-.----+++++-+++!!!!!!!!!!!!!!!!!!!!!!??????????????????????????????????????!!?X$&&&&$$$$&##############&&&&&&&&&$X!+------++..............................
.....................................-----....------+++++-++!!!!!!!!!!!!!!!!!!!!!!?????????????????????????????????!!!!!++++++!!!!!!!??X$&########&&&&&&&&&&&$X?++-------...............................
......................................-----...-----++++++-++!!!!!!!!!!!!!!!!!!!!!??????????????????????????????!!!!++++++++++++++++++++!!?X&&#&&&&&&&&&&&&&&$XX?++------+...............................
......................................------.------+++++++++!!!!!!!!!!!!!!!!!!!?????????????????????????????!!+---------------------+++++!!X$$&&&&&&&&&&&&&&XXX!+!-----+!...............................
.......................................------------++++++++!!!!!!!!!!!!!!!!!!!????????????????????????!!++-------------------------+!+++++!!?X$$$$&&&&&&&&&XXX?+?++----!+...............................
........................................----------++++!++++!!!!!!!!!!!!!!!!!!!????????????????????????!!!!!!!!++++---------++++++++?X$$??!!!?XXX$$&&&&&&&$XXXX!!?++----!................................
........................................-----------++++!+++!!!!!!!!!!!!!!!!!!!??????????????????????????????????????!!!!!!!!+!!!!!!!??XX$&&##&&$&&&&&&&&$??XX?!??!!---++................................
.........................................----------++++!+++!!!!!!!!!!!!!!!!!!!?????????????????????????????????????????????????????XXXX$&&&##&&&&&&&&&&X???XX?!X??+---!!................................
.........................................----------++++++++!!!!!!!!!!!!!!!!!!!???????????????????????????????????????????????XXXXXXXXXX$$&&&&&&&&&&&&&X+!??XX??X??+---??......-+!!!?????!!!+!-+.........
.........................................---------+++++++++!!!!!!!!!!!!!!!!!!!????????????????????????????????????????????????XXXXXXX$$$$&&&&&&&&&&&&X++!!!???????---+???!??????????!!!!!!!!!!!!!-......
..........................................------+++++++++++++!!!!!!!!!!!!!!!!!!????????????????????????????????????????????XXXX$$$$$&&&&&&&&&&&&&&&$!&X-+!+????!?!---+??!!!!!!!!!!!!!!!++++++!!!!!-.....
..........................................------+++++++++++++++!!!!!!!!!!!!!!!!??????????????????????????????????????????XXX$$$&&&&&&&&&&&&&&&&&&&X+!#$-++++!!!!!+---+!!!!!!!!!++++++++++++++++!!!!.....
..........................................------++++++++++++++++++!!!!!!!!!!!!!!????????????????????????????????????????XXXX$$$&&&&&&##&&&&&&&&&$!--+??+++++++++++---+!+++++++++++++++++++++++++!!!+....
...........................................------++++++++++++++++++++!!!!!!!!!!!!???????????????????????????????????????XXXX$$$&&&&&&######&&&&X+-.-+!&X-+--++++++--++++++++++++++++++++++++++++++++...!
...........................................------+++++++++++++++++++++++!!!!!!!!!!!?????????????????????????????????????XXXX$$$&&&&&&######&&$?!+...-+&?----++++++--++++++++++++++++++++++++++++++++-..+
...........................................------++++++++++++++++++++++++++!!!!!!!!!????????????????????????????????????XXXXX$$$&&&&&&###&&$?!!!+...-.!+-----+++++--++++++++++++++++++++++++++++++++...+
...........................................------+++++++++++++++++++!!!!+++++!!!!!!!!!???????????????????????????????????XXXXX$$$&&&&&&&#&?--++!+-.....-------+++---++++++++++++++++++++++++++++++++...+
..........................................--------++++++++++++++++++++!!!!!!!!!!!!!!!!!!?????????????????????????XXXXXXXXXXXXXX$$$&&&&&&?----++!!-......------------++++++++++++++++++++++++++++++++...+
..........................................--------++++++++++++++++++++!!!!!!!!!!!!!!!!!!!!!?????????????????XXXXXXXXXXXXXXXXXXXX$$$$$$?+-----+!!!-......------------++++++++++++++++++++++++++++++++-..+
..........................................--------+++++++++++++++++++++++!!!!!!!!!!!!!!!!!!!!!!??????????XXXXXXXXXXXXXXXXXXXXXXXXXXX!-.--+++++!+++-.....-----------+++++++++++++++++++++++++++++++++-..+
.........................................---------+++++++++++++++++++++++++!!!!!!!!!!!!!!!!!!!!!!!!????????XXXXXXXXXXXXXXXXXXXX??+-....--+!+++++++-.....--------+++++++++++++++++++++++++++++++++++++.-+
...........................................--------+++++++++++++++++++++++++++!!!!!!!!!!!!!!!!!!!!!!!!???????XXX$$$$&&&&&&$!+--........---+++++++++-...--------++++++++++++++++++++++++++++++++++++++-+!
...................................................--------+++++++++++++++++++++++++!!!!!!!!!!!!!!!!!!?????XXX$$&&########$-...........---+++--++++-...--------++++++++++++++++++++++++++++++++++++++++!
..................................................................------++++++++++++++++!!!!!!!!!!!!!????XXX$$$&&#########X............----++--+++++-..-------+++++++++++++++++++++++++++++++++++++++!!!
............................................................................-----++++++++++++!!!!!!!???XXX$$$&&&&#####&&&$?!-...........---++-----------------++++++++++++++++++++++++++++++++++++!!!!!!
..................................................................................---------+++++!!!!??XXX$$$$$$$$$$&&###$X?!+-...........---------------------+++++++++++++++++++++++++++++!!!!!!!!!!!!!
..................................................................................---------------+++++!!!??XXX$$&&$$X!!+-----..............-------------------+++++++++++++++++++++++++++++!!!!!!!!!!!!!
.....................................................................................-------------+++++++++++++!?&&#X!??!-?+-...............-------------------++++++++++++++++++++++++++++!!!!!!!!!!!!!
.................................................................................-----------------------+!!!?XX@#####&???+!+-.................-----------------+++++++++++++++++++++++++++++++!!++++++++
...............................................................................------------++?$$?+--+!?&#$!?XX!?&#&$&!+!X+---....................--------------++++++++++++++++++++++++++++++++++++++.-+
..............................................................................---.--.-++-----+X#X!++++++?!?XX$$$$?&&?+++++-++......................-------------++++++++++++++++++++++++++++++++++++-.-+
.............................................................................----.-.-----+----+X+-+!!!++-+!!?$&$XX$??!!???++!..........................---------++++++++++++++++++++++++++++++++++++...+
..............................................................................--+------++-+---++--+&#?+++!?$X?X?$$!XX++!X??+!-...........................-------+++++++++++++++++++++++++++++++++++-...+
...........................................................................-..-------------------++?@#&X!!??!!?X$&&$&$XXX???!-............................------+++++++++++++++++++++++++++++++++++-...+
................................................--------............--++++-----------++++--------+!?+????!!??????!!!!+++?&##$!-.............................-----+++++++++++++++++++++++++++++++++++-.-+
.............................................-----------+++----........-+++++++++--------!??+----+-+?+!!!!!++++++!!++!!?$#$X!+-...............................--------+++++++++++++++++----+++++++++-.++
.............................................---------++++++++++++--......-++!++!!+-...----!$?++++-+-+!!+!!!?X$&&#$?X&&$?++++-.................................----------------------------------+++++++
.............................................--------+++++++++++++++++-.....--+++--..--++++-+?++---+++-!XX$&&&#$X$&&X!?XX+---...................................---------------------------------------+
......................-----...................------+++++++++++++++!+-....--..--+!++!?????!--!++-+++?X!--$#&$XX&#X?X&#@@&+-.......................................--------------------------++++++++++++
.................---++++---...................-----+++++++++++++++!+-.....-+--..-+!?XXX!?$XX$??!-!!!!!?!-+??$#@XX&&&#@@@#+---......................................--------------------------+++++++++++
...........--++++++++++-+---..................-----+++++++++++++++!+-.-----++++!--X&XXX!+!??XXXX?!+---+!++X$&&X&$!+!XX@@#X-----......................................-----------------------+-++++++++--
....---++++++++++++++++-+++-..................----+++++++++++++++!!!+..+++++++?&X-+@@?+?XXX$$$$$$X?!++++X$!+XX??!+?#@X$@#$?----.......................................----------..........--+-++++++----
++!!!!!!!+++++++++++++++++---...-.............----++++++++++++++!!!!!+-.-++!!!!??+?#!+---+!X$&&$$X?!!!X$?+--!X?XX??$@XX@@&$?+-.........................................------.............--!+++++-++---
!!!!!!!!!!++++++++++++++++++--..---............---++++++++++++!!!!!?????+----+++-!??&&X!-----!?XX?!+X&X!!!+--!$&&X?$X?&@@&$$&?-.-.....................-..................---.....------...--+&$?++++----
!+!!!!!!!!!++++++++++++++++++--.----...........---++++++++++++!!!!!???????!++!!!!!?#@##&$?+------+?$X?XX$$$?++-!XX?XX$#@@#$$$##X+-------..........---------....................---------..-!+?$$?++++---
-.--+!!!!!!!!!+++++++++++++++--..----..........---+++++++++++!!!!!!!!?????????X$&&XX&@@##&$X!++---+!?X$$$&&&$X?!!?X$&@@@@#$$$$#@@$?------------------++------.................------+++-..-+X!XXX?+++++-
--++!!!!!!!!!!!!!!++++++++++++--.-----..........---+++++++!!!!!!!!????XX$$$&&######&XX&##&$X?!!!!!!????XX?????XX$&@@@@@@@@#$$$$##@@#&?+-------------+++++-----...............----+-+++++-.--!X?$?++!!+-+
+!!!?!!!!!!!!!!!!!!!!!!++++++++--------......------++++!!!!!!!???XXX$$&&&&###########&XX$$X??X$&&&$$$$$$$$&&&###@@@@@@@@@@@&$XX$&#@@@@@&X!+---------+!?!+++-----...............---++++++----+X?X&?!!!!!+
???????!!!!!!!!!!!!!!!!!!+++++++--------....--+--!!!XX$$XXX$$$$$&&&&&&&&###########@@@#&$XXX$&#######&##########@@@@@@@@@@@#&$XXX$&#@@@@@@#&X?+----+!????+++-----.............------++++++-----+?$X?!!!!
?????????????!!!!!!!!!!!!!++++++---------.-..--+--!!?$&&&###########################@@@@@@@@@@@@#################@@@@@@@@@@@@&$X?XX$&#@@@@@@@@@#&X?!!??X??!!+------............------++++++!+-----+?XXX!
?????????????????!!!!!!!!!!!+++++---------------+-+??$&&&##########################@@@@@@@@@@@@@@########&&##########@@@@@@@@@##&XX??XX$&##@@@@@@@@@#&$XX???++++-----............-----++++++!++++--+?!?$
?????????????????????!!!!!!!!+++++--------------++++??$&&############################@@@@@@@@@@@@@@######&&&&&&##################@#########@@@@@@@@@###&$XX?!!!!?!+--+----.......-..----++++++++!!!++++!
????????????????????????!!!!!!!!+++--------------+!+!!?&&##############################@@@@@@@@@@@@@@#######&&&&&&&##########@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&X?!!+++!++++-----.---...---------+--++!!!!++
???????????????????????????!!!!!!!!++-------------+?!!??&###############################@@@@@@@@@@@@@@#########&&&&&&########@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#&$X!!++!!!+!!++-------.--.---------+++!!!!!
?????????????????????????????!!!!!!!!+------------+!!+?XX&#################################@@@@@@@@@@@@@####################@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&X?!!!+!!!!!!+--------.-.------+++++++!!!
X???????????????????????????????!????!++-----+--++-+!??X$X&##################################@@@@@@@@@@@####################@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#&$X?!!!!!??!!!+++------.-------++++++++!
XXXXXXXX??????????????????????????????!!+++-+-+!-+++!!!X?$X&####################################@@@@@@@@###################@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$X?!!!!!???!++++--------------+++++++
$$$XXXXXXXXXXX?????XXXX?XXX?????????XXX?!!!+++++!-+!!!!!XX$$&###########################################################@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$X??!!!!?XXX?!+++-------..----++++++
@@@#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX??!!!++++!+!!!!?!X$$$$#########################################################@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$X?!!!!!?XX??!+++-----.-.----+++++
@@@$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX$$XXX???!!!+!!!!!?XXX$$&&#########################################################@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$X??!!+!????!+++++------.---+!++
@@&XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX$$$$$$$X?X???!!!???X$$$$$&#########################################################@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$X??!!!!!??!!!++!+-----.----+!
@&$$$XXXXXXXXXXXXXXXXXXXXXXXXXXXXX$$$$$$$$$$$&$$$X?X???$X$&#&&&#################################################@@@#####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##&$XX?!!!!!!!??!!++!+---------
&$$$$$$$$$$$XXXXXXXXXXXXXX$$$$$$$$$$$$$$$$$&&&&&$&$X$$$X$&&###########@@@@@@@@@@@##########################@@@@@@@@@@#####@@@@@@@@@@@@@@@@@@@@@@@#&#@@@@@@@@@@@@@@###@@@@@@##&&$XX?!!!!!!???!!!!!++-----
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&&$&&&$$############@@@@@@@@@@@@@@@@@@@@@@###########@@@@@@@@@@@@@@@@@#####@@@@@@@@@@@@@@@@@@@#X&@@@@@@@@@@@@@@&!+?$#@@@@@@@###&$XX??!!??????!!!??!+--
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&&&&###&#####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#####@@@@@@@@@@@@@@@@#X&@@@@#@@@@@@@@@@#?++?XX&#@@@@@@@@###&$X???XXXXXXX!!???!
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&&###########@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#$X@@@@##&##@#@@@@@@$!++?X?X$#@@@@@@@@@@##&&$XXXX$$X$$X??X
$$$$$$$$$$$$&&&&&&&&&&&$$$$$$&&&$$$$&&&&&&&&&&&&&###############@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@#@#$?&@@@##&&$#####@@###?+++?????X&#@@@@@@@@@@@@##&&$XX$$$$$$
$$$$$$$$$$&&&&&&&$$$XXX???!!!!!!!???XX$$$&&&&&&#################@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@#####$??&###&&$$XX&########$!+++????!?X&#@@@@@@@@@@@@@@@@##&&$$$
$$$$$$&&&$$$X??!++---------------------++++!??X$&##############@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#######$?!?X$$$$XX????X########?+++!?!!!!!!?X###@@@@@@@@@@@@@@@@@@@
$$$$$$$?+--------------................----++++++!?X$&#######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@######&X!+!!!??????!!!!!X&######$+++-!$?!!++++!?$#@@@@@@@@@@@@@@@@@@
$$$$$$!....--................................--++!??????X$&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#####$!+++++!???XX$&&&&&&$&######?++++!???????!!!!?$##@@@@@@@@@@@@@@
$$$$$!....--.............------...................-+!?X$$XX??XX$&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#&$!++++!?XX$&&&X?!!++++!$######$????+------++!!???XX$&##@@@@@@@@@@
$$$X+...---.............-??-+!!?!+....................-+!?X$$$$XX?????XX$&&##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#&X!++++!X$&#&X?!+++-++++!!$######@#$X?+-------------++!?X$&##@@@@@@@
XX?-...-+-...........-.-X&!-X$$&&$-......................---+?$&#&$$$$$$$$XXXXX$&##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#&?+++++!$&&#&X!+++++++++++!!X#####@@@$!?!+-----------------+!?X$&##@@@
X?-...++-....----------!&$!+$#&&&$+---------................--+!XX+--+++!X$$&###&$XX$$&#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###@@@@@@#X+----+?&&##X?!!++++!!!!????X$&#&#@@@@&X!++++-------------------+!X$&##
!-...--..------------+-X#$++$&$$$X+---------------.............--?X?+-------++!?$&###$XXXX&#@@@@@@@@@@@@@@@@@@@@@@@@@@@@######@&?+----+X&#@#X?!!!?X$&&&&&&&##&##&$@@@@@@@X!++++?XXX?!+--------------+!X$
...-.--.------------+++X&X!+$&X???!---------++++++++---...........-+??!+----------+!X$&&$X???X$#@@@@@@@@@@@@@@@@@@@@@@@@##&&&&$?+-----?&&@#X???$&######&&&&&&&&&&X&$X?X$$X!+?X$&&#&##&$X?++------------+


