Assignment 1: ASCII Art

Pranab Kumar Mondal
(MSc Computer Science; B2330048)

Introduction

ASCII art is a unique way of representing images and videos using text characters instead of pixels. In this assignment, I explored various methods to generate high-quality ASCII representations, comparing different approaches such as grey-level mapping and PCA-based character selection. The process involved converting images, videos, and even full video sequences into ASCII while optimizing parameters like patch size, resolution, and font style. Through systematic experimentation, I analyzed how different techniques impacted the quality of the output, ultimately refining the process for the best results. This report documents the methodologies, challenges, and improvements made during the ASCII conversion tasks.

Simple ASCII Art Generator

Our first task was to generate an ASCII text file from an image file. We have two different grey level mappings for ASCII conversion:
grey10 = "@%#*+=-:. "
grey70 = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^‘’. "

Comparison of ASCII Art with Grey 10 and Grey 70

Grey level 10 provides better ASCII art output than grey level 70 because it ensures stronger contrast, better clarity, and more distinguishable features in the final image. ASCII art works by mapping average grey levels of image patches to predefined character sets, where darker characters represent denser areas and lighter ones represent less dense regions.

The grey10 consists of only ten distinct characters, making transitions between different shades more noticeable. This controlled granularity enhances the structural integrity of the image, ensuring well-defined edges and recognizable patterns. The limited set prevents unnecessary blending of details, which is crucial for maintaining clarity when reducing an image to ASCII.

On the other hand, grey70 has 70 characters, leading to much finer gradations in brightness. While this may seem beneficial, it actually reduces the perceptibility of differences between adjacent regions. Since ASCII characters vary in width and texture, using too many shades can create a visually noisy and less structured output, making important features blur together. With grey 70, subtle variations between characters become less noticeable due to the limitations of ASCII rendering. This results in a loss of sharpness and reduces the effectiveness of the representation. Grey 10, by providing fewer but more distinct levels, ensures a more pronounced and visually appealing ASCII conversion, making the details of monkeyking.jpg stand out clearly.

Effect of Patch Size on ASCII Art Quality

Reducing the patch size further improves the ASCII representation because it increases the resolution of the ASCII output. Each ASCII character represents a smaller portion of the image, allowing for more localized detail to be captured. In your case, a 9×9 patch size means each ASCII character represents a 9×9 pixel block in the original image. If the patch size decreases, more ASCII characters are used to depict the image, improving fine detail preservation. Here I calculated the patch size following process explained in the Assignment pdf. Additionally I done the experiment for ASCII image new size 80 and 160.

A smaller patch size also helps in maintaining sharp edges and subtle textures, which would otherwise be lost in large patches. For example, a face or a fine pattern in the image will be more accurately represented if there are more ASCII characters to work with, rather than each covering too much area and averaging out critical details.

Original Image & Visual Comparison

Original Image
Original Image
ASCII Art - Grey 10 (Large Patch)
Grey 10 - width 160
ASCII Art - Grey 70 (Large Patch)
Grey 70 - width 160
ASCII Art - Grey 10 (Small Patch)
Grey 10 - width 80
ASCII Art - Grey 70 (Small Patch)
Grey 70 - width 80

goto top ^

=========================================-==----===-====-==----=-=--------------====================================================================
=========================================-===---------=---------------------------==================================================================
=========================================-------------------------------------------==-=============================================================
========================================-------------------------------------------------===========================================================
========================================-----------------------------------------------------==-====================================================
=======================================---------------------------------------------------------====================================================
=====================================--------------------------------------------------------------=================================================
===================================------------------------------------------------------------------===========--==================================
==================================--------------------------------------------------------------------==========--==================================
=================================------------------------------------------------------------------------==---==--==================================
================================-------------------------------------------------------------------------------=---=================================
=============================--------------------------+*=------------------------------------------------------------==--==========================
============================---------------------------*%##=--------------------------------------------------------------=-========================
============================--------------------------+%%@@@#+=---------------:-----------::-:--------------------------------======================
=========================----------------------------=*%%%@@@ @#=-----::::::::::::::::::::::::-------------------------------=======================
=========================--------------------------==+##%%%@@@ @@*=-::::::::::::::::::::::::::::------------------------------======================
========================---------------------------=+*####%%%@@  @%*-:::::::::::::::::::::::::::::----------------------------======================
=======================---------------------------=+**####%%%@@     *-:::::::::::::::::::::::::::::-----------=++****+=--=------====================
===================-=---------------------------:=+**######%%%@     @+:::::::::::::::::::::::::::::::::-----+*#########*==-------===================
===================-------------------------::::-++**######%%%@@     @-:::::::::::::::::::::::::::::::::--=*###%%%%%%%%%%*=-=---===-================
===================---------------------::::::::==**######%%%%@@      *:::::::::::::::::::::::::::::::::-+##%%%%%%%%%%%%%%#=---====--===============
===================--------------------:::::::::=+**######%%%@@       %:::::::::::::::::::::::::::::::::*#%%%%%%%%%%%%%%%%%%=----=-=================
==================-------------------::::::::::-++*#####%%%%@@@       %=:::::::::::::::::::::::::::::::=#%%%%%%%%%%%%%%%%%%%#==----=================
==================------------------:::::::::::-+**####%%%%@@@@       @+:::::::::::::::::::::::::::::::#%%%%%%%%%@@@@@@@@@@@@*---===================
=================------------------::::::::::::-=**####%%%@@@@         #::::::::::::::::::::::::::::::=%%%%%@@@@@@@@@@@@@@@@@%=--====-==============
=================-----------------:::::::::::::=++###%%%%@@@@@@     %@ %-::::::::::::::::::::::::::::-#%@@@@@@@@@@@@@@@@@@@@@@*--===================
================------------------:::::::::::::=+**##%%%@@@%=-*@@  @=#  *::::::::::::::::::::::::::::=%@@@@@@@@@@%##%  @@@@@@@%=--=====---==========
================-----------------::::::::::::::-+###%%@@@@+...:*@  *#*# -::::::::::::::::::::::::::::+%@@@@@@  #-::--*@@@@@@@@%+-----=-----=========
===============-----------------:::::::::::::::=+#%%%%@@%-...::=@@ -@*#@-:::::::-::::::::::::::::::::*@@      #::::::-#@@@@@@@@*-----------=========
===============---------------:::::::::::::::::-*#%%%@@%:...=%#=#@@=%*%%-==-:=+*=-:::::::::::::::::::#@      @-:::::::=@@@@@@@%*------=-----========
==============----------------::::::::::::::::::+%-..:*+...+%#%+*@@#%@ @%%%++#+==*+#+=:::::::::::::::%       #:::::::::%@@@%%%%+------------========
==============---------------:::::::::::::::::::-#-.......-%%@***%@     %% #*::=::*%% @#-::::::::::::%       *:::::::::#@@%%###+-------------=======
=============---------------:::::::::::::::::::::-*:=:...:%#*%=*#%@     %@@-=------+#@   #-::::::::::#       +:::::::::%@@%%#%#=--------------======
==========------------------:::::::::::::::::::::::=%##::-*%-:*+#@@    %@ --%+-=**=-=%%   @+:::::::::*       +:::::::::#@@@@%%#--------======-=+====
==========-----------------:::::::::::::::::::::::::#+@*..:=+--+*@   @%@ *.=#%*+#%:-+%%*   @*::::::::=       #:::::::::+@@@@%#-----==-=-=++%*%@ ====
==========----------------::::::::::::::::::::::::::=+=+.....-:=*@   %%  =.=##%%%@+:-*#-#  %#=::::::::@      @::::::::::*@@%%=-----*#*--=+*@#%  *===
========------------------::::::::::::::::::::::::::=-:......-:-#   %%   +.=###%%%%+:.:-%   #%::::::::*       +::::::::::+#*------=***==+*#@%@@%====
=======-----------------::::::::::::::::::::::::::::=:..:-+..-.-@ @%%@   #..##%%%%%%%#%@@    %+:::::::-%%%@@  @:::::::::::-:---+*#%*#%****@%@*--====
======-----------------:::::::::::::::::::::::::::::-=......:..* @%%@   @ -.-##%%%%%%%%%%@   %#:::==---===+#*%@#::::::::::-=*#%%%@@@@@##%@@+=----===
======-----------------::::::::::::::::::::::::::::::*-:-:::..:@%%%@  @@  @:.:##%%%%%%%%%%%@@@%::*%##%    %@=--=-----::=+#%%%%@@@@@@%#*#%#+------===
======----------------::::::::::::::::::::::::::::::::--:....-#%%%@  @@@   @:..+%%%%%%%%%@% % #:==::=@    *-::::-*@ @**#%%@@@@@%#+==#%=-----------==
======----------------:::::::::::::::::::::::::::::::::-#%+-%@%%%@@@@%@@     =...=*%++%@%%@@  +--..=   @@%:::::* %#####*@@@@#*=-------------------==
=====----------------:::::::::::::::::::::::::::::::::-#%  % %%%%@% @@ @      %-....-+*#*##@@#%=..-  @@@%:..::% ######%***=-::::-------------------=
==-==----------------:::::::::::::::::::::::::::::::::-*   @%%%%@@% %@ @ @##%   %=::-=*=+###%%#...@ @%%%-...:@ #######%**-:::::::-------------------
---==----------------:::::::::::::::::::::::::::::::::-#@  %%%%@@%@ %@ @ %#%%%%    @###*%@@@%%-..*  ###+....% @#%@%%%%%%*+:::::::-------------------
--=-=---------------:::::::::::::::::::::::.::::::::::-#@@##%%% @% @%%  @#*+*#%@  @@       ##%..:  #+##:...*  ##@@@@@@% %#::::::::------------------
-==-=---------------::::::::::::::::::::::..::::::::::*####%%%@@@@@%%@@@#++**#%@    @@     ##*..* @==#+...-  @#%@@@@@@@   =:::::::------------------
=------------------::::::::::::::::::::::...:..::::::=####%%%%@@%@@%%@@#+++*##%%@   @=.=%  %#+::% #-=#-::.#  %#@@@@@  @@@@*::::::::-----------------
=------------------:::::::::::::::::::::.......:..:::+###%%%@@@%%@%%%@#**++++*#%@   %+**=+%@@-:-  *:+#:::-  ##%@@@@@@@@%%%%+::::::::----------------
=------------------::::::::::::::::::::..............:-=*%@@@@%%%@%%@@#*++++*%@%@@   ##+*#@@@-:=  +:*+:::* @##@@@@@@@@@@@%%%=:::::::----------------
-------------------:::::::::::::::::::...................% @%%%%%%%%@@#===++***#%@  @%@@  %#+:.=  --#+:::@ ##%@@@@@ @@@@@@@@#:::::::----------------
-------------------:::::::::::::::::::..................:%%%%%%%%%%@ %=----==++*##@   @#*--....-  ==#=::- %#%@@         @@@@@+::::::----------------
-------------------::::::::::::::::::..................-= @%%%%%%%% %+------=++**#@  *-......:.-@ ###=-=*##%@@           @@@ @*:::::----------------
-------------------::::::::::::::::::................:*=+ @%%%%%%%@%+------=+*#%%@   +.......::-@ %%####%%@@@            @@  @@=:::-----------------
-------------------::::::::::::::::::................* =*   #%%%@ #=---=====+++**#%  #.......:--% %*##%%@@@@             @     #:::-----------------
------------------::::::::::::::::::................-@ +#   %  @@#::-==------=+*#%@  #........+=#@*#%@@                 @@@ @  %::------------------
------------------:::::::::::::::::.................*@@%@  %      -.:::-----=++#@    @-.......=#*%#@                     %@@@  =:::-----------------
------------------:::::::::::::::::.............:---::-#   @@  @%@ =:::----==++#%     #........-#@%   =--@            @@@--+@ @-:::-----------------
-----------------::::::::::::::::............---:....:-#    @ @#*+# -::=++=+*#@ @   @@=-:........=%@  =--%  @        @@@*::%@@ =:::-----------------
-----------------::::::::::::::::..:::...----....:-=#@  @%%    @+=--+-=#%%%#@@@      @+............=#@#=-*%#%*%%    @**#::-@@  -:::-----------------
-----------------::::::::::::::::::::----....:-=*%@  %%@ %*#@   %+--==#**##%%@@@@    =-...............-***#**%*#%  *==*-:::#%#=::::-----------------
-----------------:::::::::::::::**:-=#-..:-=*#@  @#*=--%@%+==*%@@#:..==**###%%@@@    =.................=%#**+=*##+===+=::::::::::::-----------------
-----------------:::::::::::::-+##==#%#=*%@@ @#*+=-.....-..:::::.....::**##%%%@@@    =..................:+%*+======+*+:::::::::::::-----------------
------------------::::::::-+*####+**%%@@ @#*+=-:.....................=#*###%%%@@@    %#+-..................-++===+*% *:::::::::::::::---------------
----------------:-=-::-+*#####%#-+%@@ @#+==-......................:+%@ ####%%%@@@    @@@@@#=..................*@@@   +:::::::::::::::---------------
------------::--+****##***#%%@@    @  %-:.......................:=#    ###%%%%@@@      @%%%+..................@      -:::::::::::::::---------------
----------:....-+*****#%%%@     @%#%@ *.......................::*@@   %###%%%@@@@     @%%%+..................-       ::::::::::::::::---------------
----------....::+++#%%@     @@%+=+#---.......................--.-=*@  %%#**#%%%%%%%##+##%+...................#      %:::::::::::::::----------------
--------::...:--=+%@    @@@#+-:..-=...........................--=*#    %*...:::--=++*#% *...................=       +:::::::::::::::----------------
----=++..:.:-+**+%   @@%*=:::::.............................:=*%=*@  @@%::=*##%@@@@    %-..................:@       :::::::::::::::::---------------
---+*##:.:-=*#%%%%@%%*-:::::::............................-*#%@%+=%    ==#%@@@@@      @ %=................:%       *.::::::::::::::::---------------
---+#%%=:=##%%%%@#++#-::::::::........................-***#%%@ **++%@ @@ @%@@@@    @@   @ %=.............:%       @:.::::::::::::::::---------------
---*#%%#*#@@%%%@#=@%+:::::::::.....................:-*%%@@@@  #=-=-*#*@@##@@@%@@%%%@   @@   #...........=@        =..::::::::::::::::---------------
---*%  @@@%    #-::-:::::::::::.................:::-:--=+*###=--+*+#=*#@%**#%%%%%@           %:.......:#         *...::::::::::::::::---------------
---=@@%*##==++--::::::::::::::................::.:=+*#%%%@@@+=-=--+**+* #*#%@%%%@@@@@@@@       #+-=:.+@         #.....:::::::::::::::---------------
----+=---------::::::::::::::::..............:.-+#%%%%@@    -:-:-*#%+#* #*#@%%@@%%%%@@@@@          @@          #......:::::::::::::::---------------
---------------::::::::::::::::.............-=*#############:----#*+*%* #*##%%%%%%%%%%%@@@@@          @@@     *.......:::::::::::::::---------------
----------------:::::::::::::::...........=*++=--:-==++***##-===**::*#% %#%@%%%%%%%%%%%%%%@@@        @%#**+% +........:::::::::::::::---------------
----------------:::::::::::::::.......::-=-:--+*#%@     @@@%=-+*#--+## @@#%%###%%%%%%%%%%@@@     @%###%@@@@#-.........::::::::::::::::--------------
-----------------::::::::::::::....::-:::-+*##%%%@@         #====+**@    %-=+*##%%%%%%%@@@@%%####%@@       =..........::::::::::::::::--------------
------------------:::::::::::::..:...:=+**##%@@              #*++**@    @#%+-::--========++*#%@@         %*...........::::::::::::::::--------------
------------------:::::::::::::.::.-=***#%@                @#@*##%@#**@ @#**##*++===++**#%@@              @+--........::::::::::::::::--------------
------------------:::::::::::::::-+***%@         @@@       %#%***##+===#@%##***##%%%%%%%%%@@@@           @@@@#=:.....::::::::::::::::---------------
-------------------::::::::::::-+**#@          @%@@@      @#%****# ==::=*%##**####%%%%%%%%%@@@       @%##%%@  %+-....::::::::::::::::---------------
-------------------:::::::::::=%#%            %%%%@@@     ##%****#%@=-::-*###*####%%%%%%%%%@@@    @#++***#@    %%+:..::::::::::::::::---------------
--------------------::::::::-#@             %%%%%%%@@    #*%*****%%#@--:::+#######%%%%%%%%%@@   %+-===+**%  @@@@@#:..:::::::::::::::----------------
--------------------:::::::+%@             ##%%%%%%@@   %+%#*****@## %-:..:*######%%%%%%%%@@@ %=:::--=+*#%%@     %=:::::::::::::::::----------------
--------------------::::::-%@            @##%%%%%%@@@@ %=*%+*****%#%  *:...:*#####%%%%%%%%@@%=::::::-=+*%@         @*:::::::::::::::----------------
---------------------::::-:*            %##%%%%%@@@@@@#-+%+++*+*%##@@  =...:-#####%%%%%%%@@+::::::::-+#@  @@         @=:::::::::::::----------------
---------------------:::-::=          *####%%%%@@@@%%*-+%=++++++@*# @   :.:::=####%%%%%%@#:::::::::-+@               @%=::::::::::::----------------
---------------------:::::=%        @-:.#%%%%@@%#**@=:+#-==++++*%*#     #:::::*####%%%%%+::::::::-+% @@           @@ @#+=-:::::::::---------------==
---------------------::::-%         *+:.:%%##*+++*+::*+::---==+#+*%      +::::-####%%%%-::::::::=%%%%         @@@      %*-::::::::---------------===
---------------------:-.:#         @..-..++++++*+-:-*=:-:.:::-+#++        :::::=###%%#:.::::::-*##%  @      %#%@@@      #+-:::::::-------------=====
-----------------------:= @        +..:=:=#%%@*-::++:::-::::--*=+*        *:::::+%%%*....::::+#*#@       @#+***#%@     @%%%+::::::-------------=====
----------------------:-#@@        :..:==+@ *:.:=+::.-:.:-::-#-=+          -:::.-:=#:....::-***%       %===+++*#   @@@  @@ +:::::-------------======
----------------------:=#%@        ...:=++#*..-+--::::.-:.--*--=%          %.:::::+*=....:=**# @@@@  @=::-=++*%%@@@   @@  @-::::--------------======
-----------------------*@@        @..:-=*+##..:*::.-:::-:-=*-:=#            =..::.=+#....+**% @@@@@@+:::*-=+*#%@          =::::--------------=======
-----------------------%@         @..-=+*+#%..:*.:::.-:::=*-:-#             %..:::=*=:..+**@@@@@@@#-::::=-=*%@            %-:::--------------=======
----------------------#@@          ::=+*#+# ..:+--:::-:=+*::-*               -..::--:::*##@@@@@@@=::::::-=#@               *::--------------========
---------------------*%@           =-=+*#+#@-.::*.:+***+=::-#                %..::::::*%% %@@@@#:::::::=#@                  =---------------========
--------------------+%@            %-=+#%+%@*:::++=-::::::-#      @           -..::::#@%@@@@@@+::::::-#@                     =--------------========
-------------------=#%@             *=*%#*@@%::::::::::::-#      @@           #...::#@%%%% @%-:=::::+@                       @=------------=========
-------------------*%@               #%@%@   =:::::::::-=#       @@@          @....* %#%%%@*:::*=:-#@@@                       @=-----------=========
------------------+%%                 #*     #::::::-=+*%        @@@@@       #*:..=@%%#%%@=...:-:+%@@@                          +----------=========
------------------#@@                   @    %=-=+****%   %%%@   @@@@@@@@@ @#%-:.-@%###%@=....::*%@  @@    @@                   %=---------=========
-----------------=%@                        %++#%####%%%@%%%%   @@@@@@@@@@%#%%..:%@**#%%-:....-*#@@@@@      @@             @@%#%%#+--------=========
-----------------#%@                      %=+#*#####***#%%%#   @++*@@@@@%##%@-..==#*##%-::...-*%@@%@@ @@@@@ @@        @@%@@     @#-=------==========
----------------+%@                     %=-**+********#%###@  +::..:#@#*##%@+....:**##-::::.=*@@%%@@@@%@@@@        @%#%@         @*=-----===========
----------------#%@                   #-:=+-==++*****#%*##%   =+-:..=#+*#%  :.....+**::-:::+#@%%%@%%@@#%@@@@    @#**##@@          %+=---============
---------------=%@                 @+:.-=:::===+****#@+**#    +..--.-*+%@  %......=+:::*::*#@%%%@%%%@@#%@@@@  #+===+*#@           @*----============
---------------#@@           @@@@@ -...+-.:---=+++*#@+++*    %-...--:=# @  #:.::..-:.::::*@%#%% %%%%@@@%@@  #------=+#%@           @*=--============
---------------#@      @@@@        -:..:+::--==+#%#*=--+     *:...-=--% @   %:::::-..:::*@@#%@@%%%%@@@ @@@*---::=--=+%@@%#%@      @@@*-=============
------:::------:#   @@@            +-:::+-::=##+=:::::=@     +. .:-+=-#      %::::-.:::*@%#%@%%%%%@@@@ @*--:::::===*#***#%@@         @-=============
-----::::::---:::*#@  @@@@@        %=::::#**=::::::::-#      =...:=*+=*@      =:::::::*%%#%@@%%%@@@@@@#=-::::::::=+=+*%@    @        %-=============
----:::::::::-::-*  @%%%@@@         +=:::::::::::::::+       -...=+**+#@      *:::::.+#*#%%@%%%@@@@@%=--:::::::-=-=#@   @#+%@        +---===========
---::::::::::-::+#@%%%%@@           #+-::::::::::-=+#@ ######.:.:=+##+#@@      :::::-*:#%#%%%%%@@@@+:::::::::--:-#   @#=---#@     @ #-------========
--:::::::::::-::*@%%%%@      @@%#*+==**-:::::-=+**#@  +.......-.-+*##+#%#%%@   =:::::::+##%%%%%@@#::..:::::--:=%   %+------+%@   @@%=-------------==
--::::::::::-::=*@@@@   @%#*+=-----::+#*--+*######@@*=:.......::-+*#%*#######%@#:::::::=#%%%@%@%=...:=::::-:=%   #=---------*%@@@@@=----------------
---:::::::::-::+#    @%*==----------:-##########*=-::::::......:-+#%#*%@%######@-::::::=#%%%@@*-:....-::-:-*%%@*------------=#%%@%=-----------------
---::::::::::::*%@%#*=--------------::+######+=:::::::::::::::..:# %*%@@@@@%###@*::::::=%%%@@=::......::-+**#*---------------=#@#-------------------
----::::::::-:-**+=-----------------::-*##+-:::::::::::::::::::..%##@@%@@@@@@@#*@::::::-%%%#::::.....::=****------------------=+--------::----------
-----::::::::--+-:-----------------::::--::::::::::::::::::::::::# @#####%%@@@ @%-::::::%@+::::::....-****=---------------------------::::----------
------:::::::::::::-----------------:::::::::::::::::::::::::::::=%#@**####%%@   +::::::*-:::::::::.+#**=------------------------:::::::::::--------
--------:::::::::::---------------------:::::::::::::::::::::::::-##% +*####%@@  %::-*%=::::=:::::-#%#+----------------------:::::::::::::::::------
---------:::::::::-:---------------------:::::::::::::::::::::::::+%% @+####%%@  @=# %**::::*::::+@@*-----------------------::::::::::::::::::------
----------::::::::-------------------------:::::::::::::::::::::::=%%@ #*####%%@     ##--.::::::# %=-----------------------::::::::::::::::::::-----
----------::::::::---------------------------::::::::::::::::::::::=*#+-+*####%@  @ %#*--.::::-% #------------------------:::::::::::::::::::::-----
------------:::::-----------------------------::::::::::::::::::::::::::-*####%%@  %*@=--:.:.-@ *-------------------------:::::::::::::::::::::-----
--------------::::------------------------------:::::::::::::::::::::::::+*####%% %*@@----..= @=-------------------------::::::::::::::::::::::-----
---------------------------------------------------::::::::::::::::::::::-*####%%%*  #----:+ %---------------------------:::::::::::::::::::::------
---------------------------------------------------------:::::::::::::::-+%###%%%@   %-----#*----------------------------::::::::::::::::::::------=
+=-----------------------------------------------------------:::--::-----+*%%%%%@@@@@@----------------------------------::::::::::::::::::::-----=++
+++=---------------------------------------------------------------------+##*++#@    @+---------------------------------:::::::::::::::::::----=++++
++++=------------------------------------------------------------------...:::==*@@  @ %#--------------------------------:::::::::::::::::-----++++++
+++++=-----------------------------------------------------------------:::-*%@%#% %% @@ %=------------------------------::::::::::::::::-----+++++++
++++++=-----------------------------------------------------------------=#%@@@@@ #*#@@   %------------------------------::::::::::::::-----=++++++++
+++++++=-----------------------------------------------------------------=#%@@@%+++*%     +-----------------------------::::::::::::-------+++++++++
++++++++=------------------------------------------------------------------+%#=--=+*%@    %-----------------------------::::::::::--------=+++++++++
+++++++++=-------------------------------------------------------------------::::*@@*%    @=----------------------------:--::::----------=+++++++++*
+++++++++=-------------------------------------------------------------------::=%@  %#@    +=--------------------------:-----------------+++++++++**
++++++++++-------------------------------------------------------------------=*#%@@  #%    *=-=--------------------------------------===+++++++++***
+++++++=++=------------------------------------------------------------------=*#%%@  @#@  %#+=====--------------------------------=====+++++++++****
*++++++++===----------------------------------------========-----------------=+#%%@   #@  %%========-----------------------------=====+++++++++*****
***++++++++==---------------------------------------============-------------=*#%%@@  %@ %@#=======-----------------------------=====+++++++++******
****++++=------------------------------------------===============-----------+*#%%@@   @ @ +=====----=-------------------------======++++++++*******
****+=---------------------------------------------===============----------=*#%@@@@   @% %===========-------------------------======+++++++********
***==-------------=-----======----------------------===============----=---=::-=#%@@   @@ +============------------------------=======------==+*****
*+=----------------==--=========--------------------===============-------+####+=+%@   @ #==============-----------------------==-------------=*****
**==----------------==-==========-------------------=================-===.-*#*+++*+#   @ +==============-------------------------------------==+****
****+=---------------=============-----------------====================:-::---=+:=+*@  @%============-==-------------------------------------=-=**##
#*****+=--------------==============----------------==================-::::===-::=*%%   *=============---------------------:-----------------===*###
###*****=--------------==============----------------=================::--:::::::+@  @@ +=============------------------------------------======*###
####*****+=------------===============---------------================:-:=:--:::-+@   @@@==============-----------------------------------=======####
######*****=------------==============---------------=-=========+====::---+#*+*#@     @%==++==========----------------------------------=======*####
#######*****+------------==============----------------==============:-=:=*#%@@        @@%%==+=+*+===---------------------------------=========*####
########*****+-----------===============---------------=======+===+==:-=:+%%%@@       @ @@%##%##===-----------------------------------========**####
#########*****+------------==============--------------=-===========:-+=-*%%@@        @@%%#%*+==-------------------------------------========***####
##########*****=--------------===========---==----------=--=======---.:=+*%%%%%###@ @%@%%%@#=--=----======------------------------=========+***#####
##########******=---------------==========--===---===-=-----======+--=-----=++*#% @%@@%%%@@###+=-==========-:::::-----------------==++++++****######
##########*******----------------=========-=====--=====-----========-=+#*++%@@ @%@%@@%%%%@@#+---========--::--------------==------===++******#######
##########*#*****+-----------------==============-=====-----========--==+++*%%%%%%@@%%%@%@+----=======----------------------===========+****########
##########*#*****+=-----------------=============-=====-----========--===++*#%%#%%@@@@@@@*----=+====---------------------======++===++****##########
##########*#*****+=------------------====================--==========--==++*#%#%%@@@@ @@@=---=++===-----------------------====++++++******++++++####
##########*#*****++-------------------===============================--==++*###%@@@@ @@@%----+++==------------------------==++++++*****+=====+++*###
##########*#*****++-------------------===============================--==++**#%%@@@@@@@@%----++==--------------------------+++++******+====+***#####
############*****++--------------------==============================--==++**#%%%@@@ @@ #-===++=----------------------==+++++++******===+*##########
###########*****+++---------------------=============================--==+***#%%%@@@@@@ *+++++=--------------------===+++++++*******==+#############
###########*****++=---------------------============================+--==+***#%%%@@@%@ @*++++=-------------------====+++++++*******++*##############
#%%%#######*****++-----====-------------============================+--==+***#%%@@@@@ @%*+++==------------------====+++++++*******++################
****#######*****++====++++====-----------==========++===============+--=+++*##%%@@@@@@@#+++==-----------------=====++++++++*******+#################
+++++*#####****++++++++=-------------------==+===++++++++============-==+++*##%%@@@@@@#+++===----------------=====++++++++*********#################
++++++++###*****++++=------------------------===++++=+++++++=========-==+++*##%%@@@@%#++++===----------------====++++++++**********#################
++++++++=+#*****+++=--------------------------=====+=+++++***======+--==+++*##%%@@@%#++++====----------------====+++++++++==++*****#################
+++++++++=+*****++=----------------------------=+++==-++++****+=====--==+++**##%%@%#+++++=--------------------==+++++++==========++*################
*++++++++==+****+=------------------------------=++++=--=++****====---==+++**#%%%%#+++++------::--------------==++++++--============+*##############
*++++++++===+***+=--==---------------------------+++++++==-==+*+===--===+++**##%%#+++++=-=====----------------==++++=---==============*#############
%#*++++++====***+=---=----------------------------+++++++*+==+*+==---====++*###%#*++++=========---:::--------===+++=--================++############
%%%#+++++=====**+==--==---------------------------=+++++++*+=+*===--====+++*#####++++++=======--::-----------===++=---===============+++*###########
%%%%#*++++====***===-==----------------------------++++++++*==*+=--=====++*#####*++++++====--::-----------------=---=================++++*##########
%%%%%%*+++====+**+=====----------------------------++++++++*==+*=-======+*#%####*+++++===--:-----------------------==================+++++##########
%%%%%%#+++=====****====----------------------------=++++++++==+*#+=+==++**#%####*++++===--------------------------===================+++++##########
%%%%%%%#+++====*****+===---------------------------=++++++++==+**##*+++**#######*+++==---------------------------==================+++++++##########
%%%%%%%%++++===+******+=--=-------------------------++++++++-+++**##****#####**#*+===---------------------------==================+++++++*##########
%%%%%%%%++++++=+*********+=-------------------------++++++++++++***##*****###****==----------------------------==================++++++++###########
%%%%%#*++++++======++*******++====---------------------==++++*++****#************=-----------------------------==================+++++++*###########
%%%**+++++++++=========+********+++++---------------------==++*******************=--------------------------=--=================++*+++++############
%%**#####**+++=========-=+*******+++=------------------------=+*****************+---------------------------=-=================+++*#+++#############
%%%%%%%%%%%%#*+============*******+++---------------------:::-=+***************+----------------------------=-================+++++##*##############
%%%%%%%%%%%%%%##+==========-+*****+++=--------------------:::---+**************-----------------------------=================++++++#################
%%%%%%%%%%%%%%%%#*+===========**++++++=--------------------------=************+-----------------------------=================+++++*#################
%%%%%%%%%%%%%%%%%##*==========-==---=+++=--------------------------+++++++++=------------------------------=================++++++####%%%%##########
%%%%%@@@@@%%%%%%%%%##+=========-=======++++===----------------------++++++=-------------------------------================++++++*###%#%%%%%%########
@%@@@@@@@@@@@%%%%%%%%#*==========*****+++++==------------------------=+++--------------------------------=====+==========+++++*####%%#%%%%%%%%######
@@@@@@@@@@@@@@@%%%%%%%%*=========+*****++++++==-------------======----=+------------------------------===++++++++======+++**#####%%%#%%%%%%%%%%%####
@@@@@@@@@@@@@@@@@%%%%%%%#+========******++++++===---------=+++++++===--=--------------------------====++++++++*+******##########%%%%%%%%%%%%%%%%%###
@@@@@@@@@@@@@@@@@@@%%%%%%#+++=====+#*****++++++++=-----===+++++++++++==----------=------------=======+++++++********###########%%%%%%%%%%%%%%%%%%%%#
@@@@@@@@@@@@@@@@@@@@%%%%%%*+++++==+##******+++++++=======++++++++++++++=---=-----=+==------========+++++++++******###########%%%%%%%%%%%%%%%%%%%%%%%
@@@@@@@@@@@@@@@@@@@@%%%%%%%++++++=+###*******+++++++====++++++++++++++++========-=++++============+++++**++**+**###########%%%%%%%%%%%%%%%%%%%%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@%%%#+++++++#####********+++++==*****+++++++++++++=========++++++++========+++++**++*+***########%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@@@%%+++++++%######***********+****************++++=========*********++++++**++**++******##########%%%%%%%%%%%%%%%%%%%%%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@*+++++*%%#######*****************************+===+**********************+******#*#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+++++#%%%%##########*************************++****************************########%%%%%%%%%%%%%%%%%%%%%@@@@@%%%%%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@#++++*%%%%%%#################*###*****************************************########%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@%%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+++*%%%%%%%%%%##########################****************************###########%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@@@@%*++#%%%%%%%%%%%%%#############################*################################%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@%%#*##%@%%%%%%%%%%%%%%%##########################################################%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@%%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%####################################################%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@%%%%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%#####################################%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@%%%%%%%%%%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%##################################%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@%%%%%%%%%%%%%%
            
{{{{{{{{{{{{{{{{{{{{{{{{{{{111111111{1{{}[}{[[[[}}}[}}}}[}}[[[[}[}[[[[[[[[[[[[[[}}}}}{{{{{}{{{}{{}}}}}}}}}}}}}{{{{{1111)11)))))))1111111{11111111{{{
{{{{{{{{{{{{{{{{{{{{{{{{{{{1111111{{{{{{}[}}}[[[[[[[[[}[[[[[[[[[[[[[][[][[[[[]][[[}}}}}}}{{{{{}}}}}}}}}}}}}}}}}}{{{{1111111)))))1111111111111111{{{{
1{{{{{{{{{{{1111{{{{{{{{{{{111111{{11{{{}[[[[[[[[][[[[[[][[[[[[[[[[[][]]]]][[]]]][[[}}[}}}}{}}}}}}}}}}}}}{{}}}}}{{{{{{11111111))11111111))11111111{{
1{1111{111{{1111111{{{{111{111111{{{{}{}[[[[[[[[]]]]]]]]]][[[[[[]]]]][]]]]][[][]]][[[[[[[}}}}}}}}}}{}}}}{{{{}{}}}{{{{{111111111111111111))))111111{{
11111111111{1111111{{11111{111{1{{{{{}}}[[[[[[]]]]]]]]]]?]]][][[]]]]]]]]]][[[][[]][[[[[[[[[[[}}[}}}}}}}}{{{}{{}}{{{{{{111111111))1111111))))1111111{
1111111111111111111111111{{{{{{{{{}}}}}[[]][]]]]???????????]]]]]]]]]]]]??]]]]]]]]]]]]]]][[[[[[[[}}}}}}}}{{{}}}}}}{{{{{111111111)111111111)))))))111{
1)))111111))))111111111{{1{{{{{{{{}}}[[][[]]]???????????-?????]]]?]]]?]??]]]]]]]?]]]]]]]]]]]][[[[[[}}}{{{{}}}}}}}}}}{{111111111111{1)))111)))))))111
)))))11111))))11111111{{{11{{{{{}}}[[[[]]]]]?????---------?????????????????????????????????]]]]]]][[[}}}}}}}}}}}[[}}{{{111111111{1{1)11111)))))11111
))))))))))))))))11111{{{{1{{{{}}}}[[[]]]]?????-----__-_------?????--????????-????---??????????]]]]][[[}}}}}}}}}}[[}}{{{{1111111{11{1111111)))))))111
))1)))))))))))))11111{{{{1{{{}}}}[[[]]]???-----__-______-_------?----------------__-----------????]][[[[[}}[[[}}[[}}{{}{{{111111{111)11111)))))1)111
))))))))(((()))))1111{{{{{{{}}}}[[]]]?????---_______+__[?_-_------__-__--____-____+___________--????]][[[[[[[[[}[[[}}}}{{{{{{{1{{{1111111)))))))1)11
))))(((((((())1))11{{{{{{{{}}[[[[[]]???----______+__+++/c}[__---___________+___++++++++_++++____---???]]]]]]][[[[[[[[[}}[[{}}}{{{{{111111))))))))111
))))(()((()(())))11{{}}}}}}}[[[[]]??----_______+++++~+]YdQZ)?__+_++++++++++++++~~~~~~+~++~~++++___----????]]]][[]][[]][][[}[}}}}}{{{{1111))))))1111{
))))(((((())))1)1{{{{}{}}}}}[[[]????----______+++++~~?xmdh*h0n(_~~++~~~~~~~~~~<~~~~~~~~~~~<<~<~~++__---??-???]]]]][[]]][][[[[[}}}{{{{1111)111))11111
))))(((((()))))11{{{{}}}}[[[[]]????---______++++++++]|Xwqdh*#&hL}+~~~~<<<<<<<<<<<<<<<<<<<<<<<<~~~++___--??-???]]]]][[]][]]][[}}}}}{{{1111111))111111
))))(((((())))111{{{{}{}}[[[]]????----___++++++~~~~(|rLOmqdhaW8MhY)~<<<<>>>>>><>>>>><<>>>>>>><<<~~++++_----???]]]]][[]]]]][[[[}}}}{{{{1111111))11111
))))(((())))))111{{}}}}}[[]]]???----____+++++~~~~~-|jzLQ0ZqdboM@8WbX~>>>>ii>i>>>>>i>>>>iiiiii>><<<~~+++___---???]??]]]][][[[[[}}}}}{{{11111111111111
)))))((())))1111{{}}}}}[[]]]???---_____++++~~~~~~_1tcULQQ0wqpa*B$@@&X~iiiiiiiiiiiiii>>iiiiiiiii>><<~~~~+++__-?)/xczXcx)][}[[[[[[}}{}}{{1111111111111
))))))))))111111{{}[}[[[[]]???---____+++~~~~~~~~<)/uXJLQQ0Zwqko&@   #niiiiiiiii!!i!iiii!!!ii!iii>>><<<<~+++[/UJQ0OZZZZZU|}[[[[[[[}{}}{{1111111111111
)1))11)))){{111{{{}[[[[[]]???----___+++~~~~~<<<<-tjzUCQQQQZwqdoW%   %a+!!!!!!!!!!!!!!!!!!!!!!!!!ii>>><<<~~)YLOZmwwqqqqqwwz}[}[[[}}}[}}{{111111111111
11))1))))1{{11{{{}}[[[[[]???--____++++~~<<<<<<<<{(uXJLQQ00mqpb*W%   $%X>!!!!l!!!!!!!!!!!!!!ll!!!!ii>>>><~jCOmwqqpppppddpppQ{[[[}}{}[[}{1111111111111
111111111{111{{{}}}[[]]]???---___+++~~~<<<<<<<>>\/cYCQQ0OZqbba*8$    @k!lllllllllllll!!llllllllll!!iii>>~/rzJLQ0Omqdkho#%      b1lIllllllllllIllllllllllllll!iii|0wqpppdddbbbbkkkkkkkZ{}[[[[}{11{{{{111{{1111
{{1)){{{{11{{{{}}}[[]????---__++++~~<<<<<>>>>>>]tuYCL00mqdka*#W@      WrIIlllllIIIIIIlllllllIIIlIll!!!>Qwpdddbbkkhhhhhhhhaaaac[[[}}{{}{{}{{{11{{{111
{}{))1{{111{{{}}}[[[]????--__++++~~<<<<>>>>>>>i-)cULQOZqpba*#WB$      @J!IIlIIIIIIIIIIllllllIIIIlIll!!\qdbbka*#MMMMM#oaaaaaaod([[}}{{[}{{}}{{1{{{111
{}}{11{{{{{{{{}}}[[[]?-?---__+++~~<<<>>>>>iiiii1txJQOmwdkh*#WMW&B$  p* q-IIIIIIIII;IIIIllllIIIIIIIIll~0bhhh*MWWWWWWWWWMoaaaooaz[[}}}{}{}}}}}{{{{{{{1
}}}{{{{{{{{{{}}}[[[]]??--___+++~~~<<<>>>iiii!!!1xcU0Zpdka*#q)-uaW@ M)J%8cIIIIII;;;;;IIIIlIIIIIIIIIIll1baoo#WWWWWWpLQk&&W*ooooam1[[}}}{}[[[}}}{{{{{{{
}}{{{{}{{{{{{}}}[[[]?----__++~~~~<<<>>>iiii!!!i[xJ0Opdho*a/"^:IU*% u0uZB]IIII;;;;;;;IIIIllIlIIIIIIIIIfko*WWWW&&O]<<~~uWWW*oooak/[[[[[}[][[[}}{{{{{{{
}{}}}}}{{{{{}}}[[]]??---__+++~~~<<>>>>iii!!!!!!(rCwdpb*#p_^^"I<1*W$[aXC#?II;;<;l_;;;;;IIIlIIIIIIIIIIIva*&&&&&&O>>><<<~QWWMoaahhu[[[[[[[[[[[}}}}{{{{{
{{{}{{{{{{{}}}}[[]]??--__+++~~<<><>>>iii!!ii!!!-vQpkbh*d;^^^(d0)0#a\dzmk]}}~!(/c{?<;;;;IIIIIIIIIIIIIIL#&8888&M_iii>><<1MMM*aahkX][[[][}[][[[}}}}}{{{
{}}}1{{{{{{}}}[[[]???--__+++~~<<<>>>iiii!!!!!!l!td+:"iUf^^^/qLprca*ZmaBamqbnfCt\1zjLr{lIIIIIIIIIIIIIId8%%8888O!!!i>>><>>iiii!!!!!!!!?0]�^^^,^^-mp#vczk#@BBBBqp&ZcI>{<><<0M#bmZO0t?]][][[]]][[[}}}}}}}
{}}}}}{}{}}}}[[[]???--_+++~~<<<<>>>>ii!!!!!!!!!!!]Y>{l^,^!mCXq|vLk#@ %$%p*o_|]~-__~rQM$$8L_IIllIIIIIIO%%%%%%8fll!!iii>>p##kwZmZ)??]??]?][[][[[}}}}}}
{}}}}{}}{}[[[[[]]??--__++~~~<<<>>>>iii!!!!l!!!l!ll!\mOQ>;_vw[>UjCa#$B%BkhB~~wt~{vv}[|mqB BarIllllIIlluBBB%%%%nIl!!!iii>>>iiii!!!ll!llllllli0j#v^,;)j_?rYa&$%Mkh@U"{OqurOk!-jpbX8 @aXlllllllI{BBBBB%%CIll!!!ii>/ooahkZ]_--?{(?1[)/nqvm*8|}}}
}}{{}{{}}}[[[[]]??-___++~~<<<>>>iiiii!!lllllllIlllll)r)t^^""^+!1X#$$8qkB |�|COpdqh/;[UL[O $dZ|llllIIIl#BBBB%%#llll!!!ii>zhabm}+_--]cCc[~|xzoQp8%u}}}
}}}{}}}}[[[[[[]]?--__++~~~<<>>>iiiii!!!lllllllIIIIII}-l,�^:"^_I?Q8 &qb8  t.{Q0Zpqdkr;,i-d  @JbilllIIIIzBBBBB%8tIllll!!i>>>>ii!i!!!lllllIllIIIIII{!^^l~/^^+:?a$WqbW $8J.^0OmqqwdqpZmaMBB@%dtlllIII!~wqpaM%%o>IIll!!!ii>_<~~]tv0pUJpvvzUMkov[[}}}}
{}{{{}[[[[[[]]??--__+~~<<<>>>>iii!!!llllllIIIIIIIIII]1�^":^,i^,X8awdW%@8o%].+ZOmqddbpdqbka%@BkOlll(}_-[1()/OvwWOIIlll!!iii+\v0qqdha*M#CLmW#t1]][[}}}
}}}{{}[[[[[]]]??-___+~~<<<>>iiiii!!!lllllIIIIIIIIIII!>"^<*dqp#&BMM&@#I.>0OmqwqpqdddbkhWWkllcmQLm&@@$ka\~-)?+~[_!i{xLqwpka#WM*awJUQbZ/?]]][[}}}
{}}{}}[[[[[]]??--++++~<<<>>>iii!!!!llllIIIIIIIIIIIIIIl?-i^^"^~Oqqpo&8o*#B$ oI.^twppmpdwqphd&b Cl||lI1# @$@Y~l!!!_UM&hUv0qdh*MMobLx))Cw1-?-??]]]][[}}
}}}}}}[[[[]]??--_+++~~<<<>>iii!!!!lllIIIIII;;IIIIIIIIIl_Lwt[m*wwqhM#WbM*$   81..^{Yd//whkdaaB8t?-",)8$&M#p>!!!iv8kLQO0JcaW#hZv(_~++_-?-----??]]][[}}
}}}}}[[[[[]]?--__++~~<<<>>iii!!!llllIIII;;;;;II;;IIIl>]Jb Bp8wwwb#k%*h@h   888w+..�:-rzOXQZo*Zm1��]8@Mhhp>,:;><<~~++____---??]]][[[}
}}[}}[[[[]]]?-___++~~<<>>iiii!!!lIIIII;;;;;;;;;;;;IIIl[Y8$ Mmwwp#ak@k#@a MZZk&88d\><~}v{fCLQbdC�.:M@#qmw-���la QQZ0000dUc?!ii>><<~+++____---??]]][[[
[[[}}[[[[]???-__+~+~~<<>>iiii!llllIIII;;;;;;;;;;;;;III+Q#8$wwwqoMbM&b*8WBwQwkwd&B$%oOOJYqh#Mbp-..UB&ZQ0x...�w aCphdddddbXf!!i>>><~~+++___---??]]][[[
[[}[}[[[[]]??-_+++~~<<<>iii!!!lllIIII;;;;;;:;;;;;;;I;I?Z*oZZwwb&od&okb&B#LYxUOwa8$WW8     %00m"�i%BJtCLI...u &OOh**hhhb&mZi!ii>><<~+++____--???]]][[
[}}[}[[[]]??--__++~~<<>>ii!!!llllIIII;;;;;::;;;;;;;;;IuCZJZwwq#MhhWkbhW*Lx/ucQmh8@@@WMB   &0LX:,vB#{{Jj���+%%MLda*oM#aW$8&}iii>><<~~++____---??]]][[
}[[[[[[[]]??--__++~<<<>>ii!!!!lIIIII;;;;;:::;::;;;;;;}J00ZwwpbWhb*obp#*LrfrcCLmkM@  #{:\b%Bd0tllk@L+|J]I;:Z$&mZho*oM&&WWWWv>>>>>><<~~++___---???]][[
}[[[[[[[]?----__++~<<<>>ii!!!lllIII;;;;;:::::::;::;;;nLOZmpk*Mokq*bpdWOucnxtfuLqW@  bjUc|nmMo[!+8%uIfJ!!![BBZQpa*#M#ooakkkd/<>>>><<<~+++___---??]]][
}[[[]]]]]?----__++~<<>>>i!!!!lllIII;;;;::::::::::::::i[1Xp#M#okpdhpqaa0Uf//fYpabh#@ 8LOnc0hWo+!}B8/lun!!!X *JOh*#MWMM##*akbd{>>i>><<~~++___---??]]][
[[[[][[]]?----__++~<<<>>i!lllllIIII;;;:::,:::::::::::,,,,w&okkdqbdqpWoL|)\truccZb#@ WqhMB&pQxl:1@&[+Q/!!!h$Q0p*MWWW&WWMo#*hhO>ii>><<~~++___---???]]]
[[[[]]]]???---__+~~<<>>ii!!lllII;II;;;:::,:::,,,:::,,,,"Idqpdpqqbqqa&m)][]]{|truJOo$&BhZu[+",,.]%8{|Q|!!-&m0moM&&8888%@BM#MM*riii>><~~+_____---??]]]
[[[[]]]?????--_++~~<<>>i!!!lllII;;I;;::::,,,::,,,,,,,""?18hmmwwpdwd8pt_+++_]1/juU0M %z?:��^^^I"-W800Z|](zLOqaW88%%%%%B  B*MW8hviii><++_____----??]]]
]][[[]?????--__++~~<<>ii!!!llIIII;I;;:::,,,,,:,,,,,,"lY)x8akmwwpqbWqt_+++_](fzQmpo8@ /�����^^>i-oBdwLCQOmph*W8%BBB%BB$  BMW&BoW)i>>~++__+___----?]]]
]]][[]?????--__++~~<<>>ii!llIIIIIII;;::,,,,,,,,,,,,""U8(vB$8Zwmk*&Q1++](||\\//tcUQp% Z,�����^i[+k&qUL0wbo*#W8%BBBBBBB$  8M&8&&%0><<~+~+_____----??]]
]]][[]?????--__++~<<>>ii!!llIIII;;;;:::,,,,,,,,,""""_# rJ$  d&B#*Ci>+}{?_+_?]1tvLqM%$0�������:r\Q*XLwaW8B@$B%%BBBBB@$   W#W8*8@m><~~+++_____----??]]
]]]]]]????---__++~<<>>ii!!llIIII;;;::::,,,,,,,,""""^vM#w*$@k8B 8%@?,i><+++_?{/nQhB   M~������^)QUbJa$  $8@  $@@@$$      @dMW*8B)><<~++_+++___---??]]
]]]]]]???---__++~~<<>ii!!llIIII;;;;::::,,,,,,,"";+_-<;[O @$*M8%*pMB|li>~_+?{(fnJk&@  @0,������^+Low %&(+]M@@@$@B8&%&&8##M~?f#%o-><<~~+++++___----?]]
]]]]]]???-_-__++~<<>>ii!!llIIII;;::::,,,,,,,:~__<,",,I-0B$@BM8MQYjL%+!<{rr(ncCaB#B@8MW|];������^"}p*&%)~~b&%MBBBB@@ $WoMXl!mha&\><<~~+++++____---??]
]]]]]]???-____+~~<<>>ii!llIIII;;;::!!;,,,~__~,^",;_|Ja% WkbBBB$Wr}]+n~(LmdbOahh%B$  $o/�.�������^^,)LoL1[Yk0pUwb&@  aXUL<<~~++++++___---??]
]]]]]]??--____+~~<<<>ii!!lIIII;;ii>l!-_-_:^^";+(cpM@%qmo kULWB@%kr-_{}JUYC0qdo*MW$   \+..��������^^^^"-YuvOcvmUCk%8X{(c]Il!QqL\>><<~~++++++__----??]
]][]]]??--___+~~~<<>>ii!llIII;;><<~~++++++__----???
]]]]]???--__++++~<<>>ii!!lIII![nJ0)1CwQ|vmhWBaLzt}+"���"-��II!<;,....!izUL0mpdh#M%   {....��������^^^^^"IjwYt1}}}}}/zrIIlll!!!i>><<~~++___+___---???
[]]]]???--__+++++_<>>ii!!!?/X0QOCxzcqba#@WZcf1]l����������.........."{LYJLOwpbh#MB   mZn]"��������^^^^^^"",?/r\(\jXq%cIIlll!!!ii>><<<~+_______---???
[]]]???--___+++~tq#8CCQZqdba*MB  @h##oWO1�������^^^^^""""":U*oMBBB/IIlll!!!ii>><<<~++_______--???
]]]]???--_?_i<-?fvXzuLJzXUZwphW@@%%M% k[;^^^^^��������.�........l{QB $BQQ0mqdk*#M$  %&$Wbpqt�������^^^^^^"""""hBBBBBB[;Illl!!!ii>><<<~++_______---??
]]]]??---?l.�":?xXUzzY0wqk#%  @8#bLmW$v^^^^^^��������.........I>><<~++________--??
]]]]??--_~.�^,;itjrQwdo&$ @%Moqn1tZ?-]"^^^^^^�������........._?"_{c*@ bmOzzLwdbdbbpZJnJOdf�����������^^^^^^^"Q%BBBBBp;;IIll!l!!ii>><~~+++_______--?]
]?]]?-[~!!��,l~~1rm#% $%W*aQj_;:,+(,"""^^^^^��������..........-]{vL&B$BkX,^";!<_[)/jv0k&u.�����������^^^^^^"}%%BBBBBn;;IIIll!!!!i>><~~+++___--__--?]
]??]{/j,�<^;]xcvxq$B&*owv)iI;;;::,,,"""^^^^^�������.........i{Xb\Xa8BWMdl;{uJZdh*##&%BBk-�������������^^^^^!*%BBBBB8<;;IIIlll!!!i>><<~~++___--__-?]]
]??nUJLi"<_(UOmpmb*pwc_!lllII;:::,,"""^^^^^�������.......�-uLmhpn(q@$@&11ZdooMWW&%$  BM&b(,�����������^^^^lbBBB@@BBU:;;IIIlll!!ii>><<~~++__+----??]]
??]jQww\<{JLqddbh0xf0-!!lllI;;:::,,"""^^^^^������....�?vzYOqd#@YvrfdW@W*&#bWhM*&@$8*W@  #@b(����������^^^>kBBB@@@@Wi:;;IIIllll!!i>><<~~+++_+_----?]]
???cZwb0YQoabbkMZ}hkni!!llII;;:::,,""^^^^^^������..;]Yqkho*WB@L\-1-XQc#MZZ#*hkhakdpM$  Wa  @L,���������^)MBB@@@@@@|::;;IIIIlll!!i>><<~~+++___---??]]
???vbB MMWq8@%BO_>><<~~++++__-_-??]]
???{hWqvLZ}}jf[~<>>iii!!llII;;::,,"""^^^^^����l;^l1rY0pbkahan)]{[[fuunvBQvCq*wqk#W**M*#W8@    &0x~|<,xW%B@@@@$$$0:,:::;IIIIIll!!i>><<~~++++____-??]]
????/1--__++~~~<<>>>ii!!!lII;;;::,,""^^^^^��^l:-xZwqdkaM8B$B_i~i+X0dnZv%LzOobphhbqdkaao*#&%B$    %%ha%%B@@@$$$$J:,,:::;IIIIIll!!i>><<~~+++++_---??]]
?????---__+++~~<<<>>>ii!!llI;;;::,,""^^^^^�"](cLZOQCLQ0000QJ!_[?]LU/cdU&CcJLqbpqqqqqpbkhao#W88B    $@%W##@$$$$Y,",,:::;;;IIlll!iii><<~~++++__---??]]
????---___+++~~~<<>>>ii!!llI;;;::,,"""^^^:|cxf([~<_}\jnzXXQQ?{1\Xz<<<~~++++___--?]]]
???----___+++~~~<<<>>ii!!llI;;;::,,""^;>])+i~[/vQdo&B@%&W#*k}[nz0]?rCZBWa0pwZOZmwwwqqqpdkha*&@ $&hqZOZba*ooJ-"""",,:::;;IIIIll!!i>>><<~++++___--?]]]
???-----__+++++~~<<>>iii!lIII;;::,,><~ili]/cQZqpboM8%BB@BB%&J)\\{fXY*B% @m]}rUOZmwwwwpbhaahkqOCJQqoW% $@ %$|""""",,:::;;IIIlll!!i>>><<~++++___--?]]]
???----___+++++~~~<>>>ii!llII;;::;:^,!}fzYL0qaWB$  $$@$$@$  $ZujruUo8@ $hZpx]ii_[1(())(||tnzLpoW@       8pY""""",,,,::;;IIIlll!!i>>><<~++++___-??]]]
???----___+++++~~~<<>>ii!!lIII;:II:_\czUCqo%$  @@$%@       #ZhXCLd*0vva$*ZvYQLUnf||\tncU0whW%@$           Mn-],",,,:::;;IIllll!ii>><<<~++++___--??]]
???----_____++++~~<<>>>i!!!lII;l>]jvzYqM@@$  $$ %a*W&B     m0qXzXJLf|)|CWqQJzXULZwpddbbbkkha*M%@        %oa*#Q)!,,,::;;;IIlll!!ii>><<~~+++____--??]]
????--_______+++~~~<<>>ii!!lII;_rvcOo$$8B$$$  $*ka#M&&B   #QmUXXXC&|1!>}Xp0CUUJCQZmwwwqqppbhoW%@    $aq0OpkW$$kn+,,::;;IIIll!!!ii>><<~~+++_____--?]]
????---______++++~~<<>>>ii!lII\wLk$$   @@@   &qpdkh#W&8  @QCqzzYz0kM([!!]uOLJUJL0Zmwwwqqpdka#W8@  WCrnucUOa8  8dmfl::;;;IIlll!!ii>><<~~++++_----??][
????----_____++++~~~<<>>ii!l_0*8@    $ B$  $kmqpdbkaM&8$ OXdccczzqqZ#?+!l><~~~+++++-?--?]][
???----_______+++~~~<<>>iii/pW%$   $@B@   %ZZwpdbbkh*&8$wjqLvczvcaZQ&m_!:"IvLCLQOZmwwwqppda#W%q1<<<~~+++___---??]][
???-----______++++~~<<>>>>?dMB   $@BB$   WLOwpdbkkha*W8b)UqnvuzcUk0p&&Y!^�^!ULQ0OZmwwwqppkoMb{Ii!!!i_{jUwM@ 8BB    Wui;IIIlll!ii>><<~~~++___-???]]]]
???----______+++++~~~<>>>~>XB  @@@@@   BwL0mqpdkhao*##Z]nprjrvxvq0QoWB ):�^I?QQ0OZmwwqqpbaofI!!!!!!i?/J#$%WW$   $$   W}IIIll!!ii>><<~~+++__--???]]]]
???-----______+++++~~<<>~!<)8 BB@@$  $zCQ0Zqpdkao*owqu~fm\t/trjnaXJ8W  8>";!>(O0OZmmwqqdhQ><<~~+++__--??]][[[
???-----______+++~~~~<<<;i)b$ $$@   #_;:Qmwpbh*dQYXa\ijQ?|\/t/fzmcQ@%   Zll!!<<~~+++__--?]]][[}}
???-----_-____+++++~~<ivjI;_~+((/Zxup@B    /!l!!~LOOZmwpq?l!!!!!!i|mkmk&%%BBB@BBMa*B    @pX]>l!i>><<~~~+++_--??][[[}{{
???----_______+++++~~<-^!ii>>>~~~++__-??][[}}}}}
]??------_______+++~~~_I)&W&%B     j..I1i|Qbkhz~I>/x!li_Ii>l--U)/U$@      Ull!!lxmmmc��^:l!!ifJXJ*%%B%&8%aJnucY0qM   @8oddb/ii>><<~~~+__--??][[}}{}}
]??------_______+++~~~<+QaM8%      I.�I}1/h8Y>,>|j<<~~~~+__-??]][}}{1{}
]???------___-__+++~~~<}0bW%      &..">{rfZY^"+t+_l><<~~+++__--??][[}{{1{}
]???------___--___+++~~Y#M8       #..l-\vfQ0""ivI;"_ll!_!-1z+i{L$$$ $@@@$$  {::!!:|rC:^."/zzp&*oh#WMxi!>u-1jX0m*B $BB    $)<<<<~~++++__--?]][}{{1111
]]??-----------___++~~-mM8$       W."_)rYfJd^,;U,>I;"-l;!|X~!?J@   @%88B@$$ k":;>>)v(I,^xzU*W*oo##L+!!!<(-1YmW$B8@        k~<<<~+++___--??][[}{{111)
]]????-----???--___+~+0hW@         ;!1tvJ/J8,,Ij_~Ii<_>)jz>!+UB$ $B8888%%@$  [,:Ii_+!l!XCOo*aao*o|!!!!!i~|LM$%&8@@@$ $$$  $Y<<~~+++__--??][[}}{{11))
]]]???----?-??----__+YbMB          (-|jY0rO#[:IUwd%whhh*C(Q#$88$$&%BBB@      %)~~+++__---?]][[}{{11)))
]]]]????????-???-_-_rqo8           b-\xLmxqWU;llrj\]!IIl!!~C@@   8W&888%%%%B  _^,;l!i0hdhh#ha#/!!!!!!?CM@88%%BB@8%@$        %1~++___--??][[[{{{11)))
[]]]????????????---)ObW$            z|zdZUM*b!llI;;;;;Il!_L@$    #W&&888888B  C�":I!ZMqpbk8ap_i{i!!ija%&8$88%B@$B$           W}++__--??]][[}{{11))))
[]]]????????????--]Yp*B             $LkodM@ $(llI;;;Ill~1Z@      oMW&&88888$  *"^":Y8qOqbkWY;;iX}!-QM*W888%&B$  $@$$     $    W1__---?]]][[}{{11))))
]]]]]???????????--jqb&  $ $$$$        QU$ $  O>!!ll>_}fud$  $8  @*MMWW&&&&& 8Oci�^|WbwQpbo\�",l?itdhWW&88%B8B@@$ &BB@   @$$    8/_--??]]][[}{111))))
]]]???????????????Qo#@ $$@$@$$$$$  $  $%W8B%@p\?)jvYUYwB@%qqwM$ %###MMWWWW%hLd_!�~akJZZda{".�";i[lllfJ*bwwoddh*Ok#MMWB&&BWQuvJZhWB$B$     %mn1]][}}}{{{1)1)11
-___+_++____---)ko8 @BBBBBBBBBBB@@BhjI,]\>;>{)\fuuczJhnuXZ @ %f:^??:+vrmM  p::::::)j!Iizl!uOawmqowqbh*Zd*MMM%BOt(|\fcLh&%        BaU[[][{}}{}{111({{
___++~++++++__-LhW%$BBBBBBB88W#MWW&~"",/-"<+[]{fjxvChf/fY@$  p_..,][i{L8W$ QI:;;::~;:;i>!zhdOmk%dqdkh*akoM8&J[]--][)rCpMB$@B%B@@@@B*v\[[}}}{{{{11){{
__++~+~~~~+++_?O*8@ $@BM##M88B$   $-;::!x!<_[)(nJmLv}_?j8 $  Ui..,~\~+p&W@  k>;;;I~::;I!Y#*Zm*#kqdkhho8h*WU-_+!i{]]{xm*apZdM8&&&&&W*oc[}}}{{{{11)1{{
_++~~~<<<~~~++~lC8$8aoM%@B%8%B$    j]I;If+;>\QLx}iiii>{a $   n^ .I_j(]J&&8   k!I;I~:;I!U#kZpWbqbpkhhha%WU-~\}1XOUczJwaM%@@@B%%BBh[}}}{{{{111{{1
++~~~<<<<<<~~+!I>UO#$@Maha#&B@@$   p\>lliQzv((r\tzqM@$@%W&&&888&%q[}}}{{{{{{{}11
++~~<>><<<<<<_I!]U&%hpdkaoW&%B$    $x|!l!>>>><<<+!>tZWmwpboW%@$   $BB@B0x]!!!!!!!!!i_{tQW@CLJLZL:<.i|xJQjQMW&&8  8>l!!!!!i_-<[0B $MC(__]JM%%888W&0-?]][[[}}}}}}{{
++<<<>>>>>>><+![\rvvCW$@r:::::,:_�+/vQOnLwOwd*@ @)lllll!lfOZwdkbkhMQ>>>>>>_li}YaaWW8B8oqCu/)-++~~<>>>>>>~!i/LBB@&*pz\}-___++~~~~<-QOZOOOO000c\_I;;;;;::::::>?jQdQUpaw0CQ0QQM]llllll}ZpbkM*Y_l�.�:[I!~i[Ymk*Y]++++++++___10qb*k)++__++----___--?]
_+~<<<>>>>>>uwMpOv)------___+~~~~<0&kYm*ao*#bZQJoulIl!!!{mdkho(>>>+I+vYn(+__-------__+~+~~<<~YZCj?i!!llllIIII;;;;;;;;::kL0aadhho*#MWZzoi!!!!!_pbkJ<<>>>+[t->~~+__------__+++~<<<<]]>>>ii!!!llllIIIIIIII;;;;C&oZJJL0mph*M@Ww_!!!ii!qaf!i!lI;:"""+vczu{__+__+_+__+__++++~+++~~~~~~<<<<~~~+++__--
?-_+~~<<<<>>>><<<<<~+__-------_+++~~<<<<<>>>iiii!!!llllIIIIIIIIII\b0WXzJLQZqk*8$@r!iiiiiv?!ll!!lIll"/QXv1_________+__+__+++~~~~~~<<<<><<<<<<~~~++__-
?--_+~~~<<>>>>><<<<~+++-------__++~~~~~~<<<>>>>ii!!!!!!llllllIIII_QQb&nYCLQZqh#$$dii?Xw|>>I!}!!!i!_ObJ/++_____+___+_+++++++~~<<<<<<>>>>>>><<<<~~++__
??-__++~~<<>>>><<<~<~++_------___++++~~~~<<<>>>>iiii!!!!lllllllllixdm%*nJCLQmpaB$W}Q%kvvc!!i!tM*z]_+++____+_____++++++~~<<<<>>>>>>>>>>>><<~~++++
?]?--_++~~<<<<<<<<~~~~+__-----____++++++~~~<<<>>>iiiiii!!!!!!!lll!1pk#%OcJCLOwbWB&&B%JL[_:;li!!iCBb\+++++____-++____++++++~<<>>>>>>iiii>i>>>><<~~++~
]]??-__++~<<<<<<<<~~~~+_-------___++++++++~~~<<<>>>>>iiiiiiii!!!!!i(uJj-jUCCLZph&%M@mJv~_,I;lI+b%0]_++++_____-__---_+~~++~<<<>>iiiiiiiiii>>>><<~~++~
]]]??--_++~~<<<<<~~~~++_-------_____+++_++++~~<<<>>>>>>>iiiiiiiii!iiiiii]cJCCQwd*8%bz#}~~i:I,]#&u___+++___-________+_++++~<<>>iiiiiiiiiiii>>><<~~+++
?????--__+++~~<<<<~~+++_--------___________+++~~<<<<<>>>>>>>>iiiiiiiii>>>/YCLLZpk8bcW*~~~_�"(&*|____+___---_----______++~<<<>iiiiii!!iiii>>>><<~~+__
???--??-__++~~~~~~~~+___--?????----__________+++~~~<<<<<<<<>>>>>>>>i>>><<~YCLQZpkkz%BZ~~+_;r%m[_______--____-??-_____++~~<<>>>i!!!!!!iiii>>><<~~++_-
]???-??--__++~~~~~~~+__-_-?]???-----____--__-__++++~~~~~~<<<<>>><<>><<<<~tp00Owdka&B&b-+++?Jc?_____----__---_-?-_____+~~~<<>>>i!!!iiiiii>>><<~~++_?}
r(??????-___++~~~~~~+___--?]????----__---------___++~+~~~~~~~<<<~~<<~~~~-jYbmmqbhMM#W*]____-----------------_-??_____+~~<<>ii>ii!i!iii>>>><<~~++?(fj
rrj{????--__++++++++++_---???]??--_-__---????-?-____+++++++~~~~~~~~++++~_/ZQvj/Zh88%&#f___------------??--------____++~~<<>>>iiiiiiii>>><<<~~+_)fjjr
rrrj(????--____++++++__---??]]??--_-_----??????----________+~+~~++++++~�^,;l>}1voa&bO[------------???--------___+++~~<>>>>iiiiiii>>>><~~++?/fjjrr
rrjjj|????--___++____----]??]]??----_--?-??]??????--__-_______+++__+++_!;!]ud#b0kBpm&MM8b}_-------------?-------____++~~<><>>>>ii>>>><<<~~++[tffjrrx
rrjjjf\]???--_-______----]?]]]??-----?-???]]]]]????---------_________++-|Jdo**#W&CUQoaBB%m----???-------?--------___++~~<<<>>>>>>><<<<~~~++}ttfjjrxx
rrjjfff\]???----__-__----?]?]]???-????????]]]]]]]????????-------_-____++_(Lko*#qxtjYk%%BB8j--?????????--?-----?--___++~~<<<<<<<<<<<<~~~++_[/tffjrxxn
rrjjffft(]???------__--]??]???--???????????]]]]]]]]]]???????????-?--___++_-jmC\__{rXb#%BBBp???]??????????--??-----__+++~<<<<<<<<<<~~~+++_?\/tfjjrxnn
xrrjjfftt}]???--------?]?]]-???--__-??-????]]]]][[]]]]]]?]???????-----_____-+>!l~\0khM%@$Mo&/1111{{}}{}}}[[[[]?????---___++_____[))(|({{[]??][{(fuXXYU
Xn{[[[]]]]]]]]]????1}--{)(((1))}_____________--?]]][}{}{{{{11{1{{{}[[[[[[]/OZZLj(rqW%@$oBJ111{{1{{}{}}}}[[[]???????--___~+____]1}?_-]]]]]]]][[{vvcUU
Yu\}[[[]]]]]]]]]???-)1?((((()())1?__________---??]][}}{{1{111111{{{}}[}{(:]XLXrf/un0%@$#%/1111111{{}}}}}[]]]]]??????--__++____~+_??]]]]]?]][[}}tYUXX
UUYzf{]]]]]]]]]?????-))((((()(()))[_____--__---??]]}}{}11{111111{1{}}}{i~!i++?{x!}nY*@$Md))11111{}}}}[}}[][]?]??????---_+++_~~___-???]]]][[[[}[{UUJJ
JUUYYzf}[]]]]]]]????--(||||(((((())}-_-_---_---??]][}}}{1{{11111{1{{{{~ilii11}-!!}ubb%B%Y)1111111{{{{}[[[]]]???????----__+~<__---??]?]]]][[[[}}}YJJC
JJJUUYXc\[]]]]]]]????-]||||||||((())}--_-----???]?][[}}}{{{{111{111{{}>><<~~+__-?]??????]][{\///tjnzXYUJJCCCC
00OOO00QLCzUYXzcu[?????--_+++++++1||((())1]{111{[[}{{}}[[[[[}}}{{{1)_1fCzjxwaM&Wkoko*dpbkao0j]][(\\|(()1]+<<~~~~++++____-]}}[]]][[}})/ruvzXYUJJCCCCC
00OOOOO0QLXJUXzcut????--__++++~++~[||())))111111}[}{{}}[[[[[}}}{{1{|_?1(/jrUdmkwqpahkbkhkhn]]?[\\\||()?~~~~~~~~~++++__--]]][1()1{}}}{{1nzXYUJCCCCCLL
0OOOZOO0QLYJUXzcun}???---_+_++~~++~?(()))))1111){[}{{}}[[[[[}}}}{{11[_})\fjzQwpOqb*hha#hhu]??]\/\\||[~++~~~~~~~~+++___--?{))1|\/t|\\trvzXYJCCCLLLLLL
OOOZZZOO0LYJUXzcun\????-___+++~~~+++?())1111)))){}}{{{}}}[[}}}}}{{{1}_?1\fjvLmOwdMaa#&o#h(??-(//\\(_+++~~~~~~~~~++___--???)|\\tfjrxnvczYYvr////xCLLL
OOZZZZZO0QUJUXzvunj???--___++++~+++++]))))11)))1}{}}{{}}}}}}}}}{{{111_?}|fruJOZpoaa*&MMMk?---///\)+_++~~~~~~~~~~++__--???]}\/fjrxnuvzXYx|||\\///zLLL
OOZZZZZO0QUJUXzvunr]???----++++~++++_+}))11)))1}}}}{{{}}}}}}}}{{{{{{(+-{|frcUQwdhhoMWWW#m----//\1~_+++~~~~~~~~~++__--??]][[tfjxnuvczXz/(|\\jvXUCLLLL
OZZZZZOO0QJJUXzvuxr]??---?__++++++++___1)1)))()}}{}{}}}}}}}}}{{{{{11(_-{|fxzU0qbdh*M&Wh&J?}(\//1++++++~~~~~~~~++__--?]{|/ttjrxnvczXYz|(|jzLQQQQQLLLL
ZZZZZZOO0LCXUXcvnxj???---]_-++++++++___?1))))(((}}}}}}}}}}}}{{{{1111(_-{|juzUOppba*WMh*8Ufftt/|+++++~~~~~~~~~+++_-?}(\//tfjrnuvczYYX(|nJQQQQQQQQLLLL
ZZZZZZZ0QLCYXXcvnx\??---[?]-_++++++_____1)))(((((}}}}}}}}}}{{{{{1111t+-1\jvzUOwpbaWMko8MUftt/\]+++++~~~~~~~+++__-}(|\/tfjrxnuvczXYY/tULQQQ0QQQQQLLLC
ZmmmZZZ0QLCUczcunj[???-{}1}-__++++_____-})))((||){{}}}}}}}{{{{{11111t_?1\jucUOwphMMh#&Wkuft/\|~+~~~~~~~~~++++__](|\\/tfjrxxuvczXYYxrCCLLQQQQQQQLLLCC
cczU0ZZOQLJUYuuunt())(////|){}]?______-_?}))|(|\\\(ft\(1{}{{{{{11111/_[)/jxcJ0wb##aWWMoLft/\|[~~~~~~~~+++++___}||\\/tfjrxxnuvczXYYrJCCLLQQQQQQLLLCCC
xxrjjuC0QLJUYzvxxrjftt/)[?---_________-----}(/\\\/fj/rrxj\{{{{{{1111\-}(/fjzJOwkoaMM#hQnf/\|(?~~~~~~~~++++___}||\\/tfjrxxnuvvczXYYUJCCLLQQQQQLLLLCCC
nxrrjftnJLJYXzvunrjf|[?--?----________------?(\\/ttf|rrxnnnt1{{{1111(]{(/fjzCZwka***bLrft/\|(-~~~~~~~~~++___?||\\/ttfjrxnuuvvczXXYUJCCLLLQQLLLLLCCCC
nnxrrft/\nJYXzvunxf{]??-???---_________-----?]||1){/\/rxnnuuu\{{111/_[1|/tfzJOwkhoodCrft/\|)}_~~~~~~~~~++__--{\\\/tfjjrxnj\|/ruzXYUJJCLLLLLLLLLCCCCC
nnxrrjft/\jYXzvunj}[]]??]----__________-----???(tft))+/xnnuuuvf{{{{(_[)|/tfcU0ZdkhqJrjft/1-~~~~~~~~~~~+++__--]\\//tfjjr\{}}}{{{{)tnYJCLLLLLLLLCCCCCC
unxrrjjt/\)jXzvun1][[[[]?---___________-------?-|tfff}_-{/nuuvv|{{|--[(|/tfcYQmqbqJrjjf/]+--_~<<~~~~~~++___--?|\//tfj/][}}}}{{{{{1)(rYCLLLLLLCCCCCCC
unxrjrjft\))xzcvj}[]}}]]?---_____________------?-/ffjrxj|}]1(nvj}{(+-1(\/tjvY0OwqLxjjft}[(|()1-~~~~~~+++__--?[\\//tf)?[[}}}{{{{{1))(|\uCLLLCCCCCCCCC
q0Xrjjjt/\)()vcvf1[][}[??----________________--?-[fjjrxxnuj({/cf}(_+])(|\tjcJ0Qm0urjjf((\|()11{-~~<<<~~++_--?)\\//t{][}}}}}}{{{11)(||\/nCLCCCCCCCCCC
pqqQxjjf/\((1\zcr1{[[}}]]??--______+__________---_\jjrxxnnut1/Y){}~-1)||/fnz0LQZJrjjft/\||()1{?+<>~~++___--??}{\/t}][[}}}}{{{{111)(|\/ttuCLCCCCCCCCC
ppqqZujft/|()1ucv|{{[}}[]]??-?-____+++++++_____---?jrrrxnnnv((cr{+-1)(||/rvQ0CQOYjjfft/\|()[_><~~~~+++__---???]-}[][}}}}}}{{{{11)((|\/tttzLCCCCCCCCC
pppqqmuft/\|()fccn){}{}[[[]?]]-_-__++++++++____-_-_/jrrxxnnu\(rX)+1))(|\juJm0CL0Xjfft/\|([+<~~~~~~~+++__--???]]]-][}}}}}}{{{{11))(||\tt/fxLLCCCCLCCC
ddppqwZrt/\|()(cccu({{}[[[[]?[?--____+++++++_____-_1jjrrxxnn|(fcJn(/\\ffuYZmQJCQcftt/\|{+~+~~~~~~~++___---??]]]]?[}}}}}{{{{{11))(|\\\tftfrLLLLLLLLCC
dddppqwJft/\|))ucccvj1}}[[[[?]]?]-___++++++~++_-___}jjrrrrxn{(fuYLQcnxnvz0ZOLJJLct//\(-~+~~~~~~~~+++___-???]]][?[}}}}}{{{{{{1))(||\//tfjjxQLLLLLLLCC
ddddpqqmjt//\((rzccccvj)[[}[][]?-?___+++~+~~++++_++[ffjjjjrr]/rxzYQOzuccJLQQCUUJv/\|{++++~~~~~~++++__---???]][][}}}}}}{{{{111)(||\//tfjjjcQQLLLLLLCC
bbdddpqwnrjft/|jzzccccccut([][]?---__+++++~~~~~++++]tttfffj/tjjxvzYLJczzYUCJJYYUc\|[~+++~~~~~~~+++___--??]][[[?}}}}}}{{{{111)((|\//tffjrrCQQQQLLLLCC
bbbdmJcxjfft/\()))|txccccccvxf\)1}[?-__+++~~~~~++++---?}(ttftcnxuczXJzzzXYYYYXXXc|]+++++~~~~~~+++___--???][[[[]}}}}}{{{{{111))(|\/tffjjrz000QQQLLLCC
bbpYunxxrjjft/|(()11}{\nzzccvvuunnxr/__+__++~~~~~++~~~~+++}\/rYXvczzYXzzXXXzXzzcu{+++++~~~~~~+++___---??][[[}[[}}}}{{{{{111)(|\\/rvjjjrn0O000QQLLLCC
bbUYCLQLJYvrt/\||)111{{[1rzccvvuunxr|-____++~~~+~+++~~~++~~~]\jzYzcczXzzzzccccvvt++~~~~~~~~+++_+__--???][[[[}]}}}}}{{{{{11)(||\/ttXJnrnQOOO00QQQLLCC
kddbbbbddpqw0Xj\|(()11{{{}1uzccvuunx/-___-_+++++++++~~~+++<<<~}fzXcvczzccccvvvux++~~~~~~~~++++___--????][[[[}[}}}}{{{{{11)((|\//ttr0Cv0OOOOO00QQLLCC
kkkbbbbbddpqwmZJr\|())111{{[/zzcvunxr}-?___+++++___++~+~~~<<<~~+/vccvvvvvvvuuuu]~~~~~~~~~~+++___---??]][[[[[}{}}}}{{{{11)((|\//tffj000OZZOOO00QQLLLL
kkkkkkkkbbddpqwmOYt|(()))1{{}1zznftfxj{?-____+_+_______~~~~~~~~~~)uvuuuuuuuuuut~~~~~~~~~++++___---??]][[[[[[}1}}}{{{{11)((|\\/tffjuOO0ZZZZZOO00QQLLL
kkkkkkkkkkbbdpqwmZ0c\|())11111[{}[][{/r/1]-___?-___--__+++~~~~~~~~[rnxxxxxxr([+~~~~~~~~++++___---??]]][[[[[}}){}}{{{11)((|\\/ttfjxQOZOmmmmZZOO00QQQL
kkkkkhhhhhkkbbdpqwmZCf|()1)))1{]1}}(\|\rjft\|1?--__---____++++++++_-trrrrj1+~~~~~~~~~++++___---???]]][[[[[}}})(}{{{1))(||\//ttfjz0OZmOmwwwmmZZOO00QQ
hkhhhhhaahhhhkbbdpqwmOu||(()))1)}cXzvunxjft\{--??---?-----_____-_+___\jjf?++++++++++++____----?]]]][[[[[[}{))|/({11)((|\\/ttfxXQOOZmwZwwqwwwmmZZOO00
hhhhhhaaaaaaahhkbdpqqwmU\||((((()rYXzvunrjft/|{]????]]????-?{(((1}]---\f]__-_____+_____---????]][[[[[[})\tfjjrrxt|((|\\/fruXCQ0OZmmwZqqqqqqqwmmmZZOO
hhhaaaaaooooooaahkbddpqwL/\\\||(()UUXzcunxjft/\|}]]]]][]]]}/ttt///\|1]?{-???-----------????]]][[[[}}})tffjjrxnuncXXXYUJJCLLQ0OOZmmwwwppppppqqwwmmZZZ
aaaaaaoooo***oooahhkbdppqJ///\\||(nJUXzvunxrjft//)[[[[[}}1jjfffttt///\{]]][]]]]??{[???]]]][[[[}}}}}{\jjjrrfruvvzvYUUJCCLQQ00OZZmwwwwppddddppqqqwwmmZ
aaaaoooo********oaahkbdpdpztt///||fCJUXzcvunxrjfff\{}{}}|xxrrjjjjffffft)][[}[[[[])/)}][[[[[}}}}{{{{tjrrxxrfnvvzXYXJCLLQ000OZZmmwqwwpddddddddpppqqwwm
aooooo***######**oohbbkkbbpxfttt/\/0LCUYXzcvunxxrrjf)1{|nnnxxrrrrrrrjjjj)}{{{}}{[1jjjf|{}}}{{{{{{1txxxnuuxjvcnYYJCJLQ00OOZZmmwwqmqdddbbbbbbddpppqqqw
oooo****#########*aaoaahkkb0jfffttfO0QCJUYXzcvvunnnxj)|vvvuunnnxxxnxxxxrj{111{{{}}fxnnnxj/(111111|nnxxncvrxcnvzYLQQQL0ZZmmwwwwmwpddbbbbbbbbbddddppqq
ooo****####MMM###*o*ooaahhkkxrrjffxmZ0QLCJUYXzzccvvvvjvzzccvuuuuuvuuuunnnt1111)(()(uvvvuuuuuxrjjrnuunnuvnxuXvYUY00OZZZOZZZmmwqpdddbbbkkkkkbbbbbdddpp
oo****####MMMMM##o#***oaaahhUxxrjjXwmZO0QLCJUUYYXXXXXXXXXXzczzccccccccvvvn()\nvvccccccccccvvvvvvvvvcnccvYUzCUJ0OOZmmwwqqqpppdddbbbbkkkkkkkkkkkbbbddp
*****###MMMMMMMMM**##**ooaah0xnrrxZpqwmZO0QLCCJJJUUUUUUUUYXYYYXXXXXXXzzzzcjfczzzzzzXXXXXXXzzzzzzzzzzvzXUJCCQCOOZmmwqqqppddddbbbbkkkkkhhhhhkkkkkkbbdd
****####MMMMMMMMMMa##***ooaa0nxrrUddpqwmZZO00QLLCCCCJJJJJYJJJUUUUUUYYYYYXXvXXXXXXYYYYYYYYYYXXXXYYYYUYUJCLQ0OZZmwwqqpppddbbbbkkkkkhhhhhhhhhhhhkkkbbdd
****####MMMMMMMMMM#a*#**ooaaCnrrXdbddpqqwmmZOO00QQLLLLLLCJLCCCCCCJJJJUUUUUXYUUYUUUUUUUUUUUUUUUUUUJJJCCLQ00OZmmwqqppdddbbbkkkkkhhhhhhhhhhhhhhhhkkbbdd
o***####MMMMMMMMMMM#oho**oowuxnQkkbbddppqqwmmZOOO00QQQQQCQQQQQLLLLLLCJCCJJYJJJJJJJJJJCCCCJJJJJJJCCCLLQ00OZZmwqqpppddbbkkkkhhhhhhhaaaahahhhhhhhkkbbdd
oo***####MMMMMMMMM####ahkbOULZkhkkkbbbddppqqwmmZZZOOO000L0OO000000QQLLLLLCJCCCCCCCCCLLLLLCCCCCCLLLQQ00OOZmmwqqppdddbbkkkkhhhhhhaaaaaaahhhhhhhkkkbbdp
aoo***####MMMMMMMM#####**ooaaahhhkkkbbbddddpqwwmmmmmZZZZZ0ZZZZZOOOOO000QQQLLLLLLLLLQQQQQQLLLLQQQQQ000OZZmmwqqpppdddbbkkkkhhhhaaaaaaaahhhhhhkkkkbbdpp
aaooo***####MMMMM#####***ooaaahhkkkkbbbbbbddpqqwwwmwwmmmmZmmmmmmmmZZZOOOO0LQQQQQQQQQQ0000QQQQ00000OOOZZmmwwqqppppddbbbkkkhhhhaaaahahhhhhhhkkkkbbdppq
hhaaooo***#a#########***oooaahhhkkbkbbbbbbdddpqqwwwwwwwwwwZwwwwwmmmmZZZZZOQQQ000000000000000000OOOOZZZmmwwqqqqppppdddbbkkkkhhhhhhhhhhhkkkkkbbbddppqw
              
=========================-----=-=------------=====================================
=======================------------------------===================================
======================------------------------------==============================
=====================----------------------------------===========================
===================-------------------------------------======-===================
==================-------------------------------------------=-===================
================--------------=*=----------------------------------===============
================--------------*%@#+---------------:-------------------============
==============---------------+#%%@@%+-:::::::::::::::-----------------============
=============---------------=*##%%@  %-::::::::::::::::------==++=-----===========
===========--------------::=+*###%@   #::::::::::::::::::--=*##%%%#=---===========
==========------------::::-+*###%%@    =::::::::::::::::::+#%%%%%%%%+-============
==========-----------:::::-+*##%%@@    *:::::::::::::::::=%%%%%%%%%%%+---=========
==========----------::::::-*##%%@@     %:::::::::::::::::#%%@@@@@@@@@%============
=========----------:::::::=*#%%@@##@ @# -:::::::::::::::+%@@@@@%@@@@@@*-===-======
=========---------::::::::=#%%@%-.:# *#@::::::::::::::::*@@  %-:-*@@@@#---=--=====
========---------:::::::::-#**@:.=#+@*#@++-+==-:::::::::#    -:::-@@@@#-------====
========--------:::::::::::*..:.=%#*@   %@+--=#@#-::::::%   %:::::#@%%*-------====
=======--------:::::::::::::=*=:*++*@  @@=*-===%  *:::::#   %:::::#@%%+----====+==
=====---------:::::::::::::::+*..::+@ @@%:##%*-#+  *::::+    :::::=@%*---*=-+%# ==
====----------:::::::::::::::-..:.:+ @@ @.##%%*=+  %=::::@   +:::::=+--=***+*@%*==
===----------::::::::::::::::=...:.%%%  @=-#%%%%%% @#:==+**#*#-::::=+#%@@@#%@+=--=
===----------:::::::::::::::::-=.:+%%@@@  -:+%%%%%@@*-==@  =::=#%+#%@@%*+++=-----=
===---------::::::::::::::::::=%@@%%@@@@   *:.==##%@*::@@@+::#%###*#+-:-----------
=-=---------::::::::::::::::::=@ %%@@@@@@#%@ #**+#%%=.%@#*..#@#%%%#=::::----------
--=--------::::::::::::.::::::+%#%%@@@@ #+*%@     @#:- =#:.+ #@@@@@#::::----------
=----------::::::::::::...:::-##%%@%@%@#++*#@  ++%@#:#%-*:: %%@@@@@@-::::---------
-----------:::::::::::.......:=*@@@%%%@#++*%%  #*#@#:%#-+:+ #@@@@@@@%-:::---------
-----------::::::::::..........=%%%%%@%====+#@ @%*-:.%*+=:#%%@     @@*:::---------
----------:::::::::::.........=*@%%%%%=---=*#@ +....:#@#**#%@      @ @*::---------
----------::::::::::.........+%# %@@#--====+*% #....=*%#%@@        @ @@::---------
----------::::::::::........:*%     @::---=+%  @....-##  %@        #% #::---------
----------:::::::::.....::::.:*  @ #*#:-++*%@  @-....:*@%-#@@    @@:*@#::---------
---------:::::::::::-:::.:=*%%@ #@ @+-=*#%@@@  *.......:=+*###@@*+=:*#=::---------
---------::::::::=#-*+=*%%%*-::+--=+-.:+##%@@  +.........:*#==+=+=:::::::---------
-----------::-+*##+#@@%*=:...........:*###%@@  @#+-........:-+*% =::::::::--------
------::-+*+###%@ @@ #:............:*  %#%%@@   @%*..........@   :::::::::--------
-----:..:+*%@   %+++=:............--+@ %*+*##%###*..........-   @::::::::---------
--==.::=+*  @#+-:................:=*#  @:=+*##%@@:.........:@   *:::::::::--------
-=##:=*%%%#*:::::.............-=*%@*+@ %%%@@     %=.......:%    ::::::::::--------
-=%@%%@@@=*=:::::...........:=*#%@*=+**@#%%%%%     %.....-@    =.:::::::::--------
--##++=+-::::::::.........:=*#%@@*--=**%*#@%@@@@@   @#+=#     *..:::::::::--------
--------:::::::::.......-+****##%=--*+#%*#%%%%%%@@@      @   +...:::::::::--------
---------::::::::....::===+*%%@@@+=*==# %%%#%%%%%%@   @%%###=.....::::::::--------
----------:::::::..::-=*#%@      @+=*%  @+==+*****##%@    @+......::::::::--------
----------:::::::::=+#%@         ##*%*+%@******##%@        %+:...:::::::::--------
-----------::::::=*%@     @@@   @#**%*--##*###%%%%%@   @%#%@ %=:.:::::::::--------
-----------::::-#       @%%%@@ @##**%%+::+####%%%%@@ %+==*%@@ @-.:::::::::--------
-----------:::-%       %#%%%@@@+#***%%@-..*###%%%%@#-::-=*@    @*::::::::---------
------------:::#     %##%%@@%%=#+++##@ @:.-###%%%%=::::-#        %-::::::---------
------------::=     *.+%%##**-+-==+#*   *::=##%%#-:::-*%@        @*-:::::--------=
-------------:@    @.::***+-==::::=+#    -::+#%+.:::=#%    @##%   @*-:::-------===
-------------+@    *.:=##--=:::::-==@    %:::=+..:-+#@   #=++#@   @@*::--------===
-------------%@    =.-+#-.=:::::==-%      =.:-*:.-*%@@@%=:=+*%@     -::-------====
------------+@     +:+**+.=::::==:#       @.:-=:-#%@@@+:::=#@       *:--------====
-----------=@      %=*###:=====-:#         =.::=%@%@#-::-*@          =-------=====
-----------%        *##@@::::::-#   @      %..=@%%@+:-:=@             =------=====
----------*@         %@  +::-=+%    @@@   @*.:@#%%-.:=*@@              +-----=====
---------=%             @**###%@%%  @@@@@%%-:###%-..-#@@@   @        @@#=----=====
---------*@           @++*****#%% @=:+@%#%*.:=*#-:.-#@@@@@@     @%@     +---======
--------=%          %=--==+**###@ #--.**% -..-*:=:=%%%%%%%@@ @#+*%      %=-=======
--------*@    @    *.:=:-=+*#*=%  +.:--@  =::::::+%#@@%@@%@%+---+#@     @#========
---------%@@ @     #-:=-=++-::*   :.:+-@   =::::+@%@%%%@@%+:::==*##%@     +=======
--:::::-:+@@%@@     +::=:::::=    :.=*+%   #:::=#%%%%@@@+-::::-=#@ %%     =-======
-::::::::#%%@    @%#+=:::-=+# *---:.+#*%%@  :::-+#%%%@*::::::=# %+--+@  @*------==
-:::::::=%@ @#+=-----#+*###**=:...::+%*####%+:::-%%@%=..-::-# #=-----#@@#---------
--::::-:+%#+--------:+##*=::::::::.:#%%@@@%##:::-%%*:...:-+**--------=#+----------
---:::::=-----------:-=:::::::::::::#%##%%@ %:::-%=:::..=*+=--------------:::-----
----:::::::-----------::::::::::::::=#@*##%@ +:+=::-::-**=-------------::::::::---
-----:::::-------------::::::::::::::%@%*##% %@%+::-:=@+-------------::::::::::---
------::::---------------::::::::::::-=-+##%@ @#-:::+@=-------------::::::::::::--
--------:------------------:::::::::::::-*##%@%%--.*#--------------::::::::::::---
--------------------------------::::::::-##%%@ #--=+---------------::::::::::::---
+=---------------------------------------***%  %-------------------::::::::::---++
+++------------------------------------:.-**%@@@@=-----------------:::::::::--=+++
++++------------------------------------=%@@%*#@ @-----------------:::::::---=++++
++++=------------------------------------=*=-+#@  *-----------------::::----=+++++
+++++=-------------------------------------:*@@#  %=------------------------+++++*
+++++=-------------------------------------*%@ %@ %===-------------------==+++++**
*+++++=----------------------======--------+#%  % %====----------------===+++++***
**+==------------------------=======------=#%@  @@#===--=-------------====++++****
*+=----------====------------========----===+%@ @@=======-------------=====-===+**
*+=--------=======-----------===========-=**++%  #========---------------------=**
***+--------========---------==========:::=-:=%  +========--------------------==*#
##***=-------========---------========-:--::-% @@========-------------------====##
####**+------========----------=======---*##@   @**=====-------------------====+##
#####**+------========---------=======-=-%%@    @@##*+=-------------------=====*##
######**+-------=======--=-------====-:-=##%%%@@%%%==--====-------------=====+**##
#####****=--------=====-===-===--======+++#%@@@%%@%+-=====--:-----------==+***####
#######**+----------=======-===--=====-=++#%%%@@@%=-====-----------=======+**#####
#######**+=----------=================--++##%@@@@*--+==-------------=++++***++++##
#######**+=----------=================--++##%@@@@+-=+=------------===++***+=+***##
######***+=-----------================--+**%%@@@@+++=-----------==++++***++*######
######***+---==-------==================+*#%%@@@@++=----------==+++++*****########
++*###**+++=+==---------====+++=========++#%@@@@*+==---------==+++++*****#########
+++++****++=-------------===++++++====-=++#%@@@*++==---------==++++++****#########
++++++***+=---------------=+=-=+**+===-=++*#%%*++=-----------=++++======+*########
*++++==**=-----------------=+++===*==-==++*#%*++====---------=++=-========+#######
%#+++==+*==-----------------+++++=*=--==++###+++====--:------=+=-=========++######
%%%*+===*+===---------------=+++++++-===+####+++==--------------==========++*#####
%%%%++==+*+==---------------=++++++**+++*###*++=---------------==========+++*#####
%%%%*++=+***+==--------------++++=+**#**###**==---------------==========++++*#####
%%#*++++==++***++===-----------=++*+*********=----------------=========+++++######
%#*#**++======****++=------------=+*********+-----------------========++**+#######
%%%%%%%#*======+***+=-----------::-=********----------------==========+++#########
%%%%%%%%%#+======+==+=--------------=++++++=---------------==========+++*#########
%%%@@@%%%%%#+======+++++=-------------+++------------------=========+++*#%%%%%####
@@@@@@@@%%%%#+====+***+++=-------====--+----------------==++++++++++*###%%%%%%%%##
@@@@@@@@@@%%%%++===****++++=---=++++++=--------------===++++****#######%%%%%%%%%%%
@@@@@@@@@@@%%%%+++=*#***++++===+++++++++====-=+==-=====+++++***######%%%%%%%%%%%%%
@@@@@@@@@@@@@@%#+++*###******++***+++++++=====+*+++===+++*+***#####%%%%%%%%%%%%%%%
@@@@@@@@@@@@@@@%+++#%####****************=+*****************###%%%%%%%%%%%%%%%%%%%
@@@@@@@@@@@@@@@%++*%%%#########*##***********************####%%%%%%%%%%%@@@@@@%%%%
@@@@@@@@@@@@@@@#+#%%%%%%%################*#################%%%%%%%%%@@@@@@@@@@@%%%
@@@@@@@@@@@@@@%%%@%%%%%%%%%%##############################%%%%%%%%%@@@@@@@@@@@%%%%
@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%####################%%%%%%%%%%@@@@@@@@@%%%%%%
              
{{{{{{{{{{{{{{{11111{{}}}[[[[[}[}[[[[[[[[[[[[}}}{{{{}{}}}}}}}{{{1111)))111111111{{
{{{{{{{11{{{{{{111{{{{}[[[[][[[][[[[[][]][[]][[}}}}}}}}}}}{{}}{{{11111)1111111111{
11111111111111{111{{{}[[[]]]]]]?]]][]]]]][[[]][[[[[[}}}}}}{{{}{{{{11111)1111))1111
1)11111)11111{{{{{{}}[[]]??????????]]]]?]]]]]]]]]]][[[[}}{{}}}}}{{11111111111)))11
)))1))))1111{{{{{}}[[]]???-------????????????-??????]]][}}}}}}[}{{11111111111)))11
)))))()))111{{{{}}[[]??---____--------------____-----??][[[[[}[}}}{{{11{1111)))))1
))((((())11{{{{}[[]]?---____++}c(_-______+__++++++++__-??]]]][[[[[[}}}{{{111))))11
))(((())){{{}}}}[]??--____+++-Xdh0j-+~~~~~~~~~~~~~<~~+__-????]]]]][[[[}}{{11)1)111
))((()))1{{{}}[[]??--__++++~[/QwdoWbr_<<>>><<><<>>>><~~++---?]]][]]][[}}{{1111)111
)))()))11{}}}[]]??-___++~~~+|zL0wd*B%p_>iiiiiii>iiii><<~~+__-{|ff(][[[[}}{{1111111
))1))1111{}[[[]??-__++~~~<<)nUQQZqh8  0i!ii!!!ii!!!!!i><<~~)zQZmmmC\[[[}}}{1111111
111))1{1{}[[[]?--__++~<<<<_/XCQ0wpa8  %1!!l!!!!!!!!ll!ii>]rUL0mdh#@   ullllllIllllllll!i\mppddbbkkkkr[[[{1{{11{11
{{){11{{}}[]??-_++~~<<>>>i[uC0mdh#8$   qlIlIIIIIlllIIIl!>Zdbao*#*aaaad{}}{}{}{1{{1
}{{{{{{{}[[]?-__++~<>>>ii!)vQmdh#LJM$#L&[IIII;IIllIIIIIl/ka#WWMdhW#aoau[}}}[}}{{{{
}}}}{{{}}[]?--_+~~<<>>ii!!1Cmdob-"lQ%YCo>i!!!![QXUhl^|0rMXOhtt-j|}_IIIIIIIIIO&88&-i><+oMahZ][[[][[}}{{
}}}{{{}}[]?-_++~<<>>ii!!!!iz,^I^)mQua&BBqot+])ZaJ-IlIIIIq%%%b!!i>>ii!!l!!!i(z(;zxrva@%M#1c_)|1m&BX!llIlLB%%dl!!i>Z*kpx??-?1)11f}}
}{}}}[[[]?-_+~<<>>iii!llllll!nX^,<>fM$ookIJZwU~Qn8%zlllItBB%&il!!i(hkU_-[u)[rwZ8\}
}{}}[[[[]?__+~<>>iii!llllIIII],,<^ii!!lllIIIIII|,::I,qkk%8W1~0wpppbk&*Ql(\rvzQYZ_il!i}rJpha*Omoj}[[}
}}}[[[]?-_+~~<>iii!!llIIIIIIIi_}:!npdW##@B?InpwwqbaMU]{1aB%\!!)QwxQboodYtxr}[?]][}
}}}[[]]?__+~<>>i!!llIII;;I;II!)kohqpoWhM @8X;,})ZQd*UIi#Wht;!QbQQZXCf]<~+___-?]][[
}[}[[]?-_+~~<>ii!lIII;;;;;;;II\W@wwohWoWW0bo8ZcvnZbb\.q#Zv.�OhZqwq0(!i><~+__--?]][
[[}[[]?-_+~<>>i!lllII;;:;;;;;IxdZwb#aah&ZnXm#B8@  aZl[%\C!.tBOhoahMO!i><~++__-?]][
}[[[]?--_+~<>i!!llII;;;:::;;;_LOwd*koboOxxz0o$$/xpMQlCd-cI!&kwo*WM#*[>>><~+__--?][
[[]]]?--_+~<>i!!llII;;:::::::>1z*#hpkpaJftXwb& OULaL!dL[/!r&Qh#MM#ohw_i><~+__--?]]
[[]]]?--_+~<>i!llIII;::::,:::,"{kdppqad{}{\xLh$odv]i�bYx{!0mpM&88%&#*Uii>~+___-?]]
[[[???-_+~<<>!!lII;I;::,,,,,,:)Uawwpbk)++]\z0a$x��^:IZaOvXZbM%%%B$ M&Mzi>+____--?]
]][???-_+~<>i!!lII;;::,,,,,""jwO@khaO[?{{{)tYw%C���^{UbLqoW8%BBB@  #8WW><++___--?]
]]]]?--_+~<>i!lIII;;::,,,,""!Ym&8&@&h>>~+-{rq% a:���?QZ&8qM$$$B$ $%Zp&O><~+++_--?]
]]]??-__+~<>i!lII;;::,,,!i!!:u*O><~++___-??
]]]??-__~<<>i!lIIIi!~>i!,i1Xkk*80o@o/~)UCmh*W  U,.����^;{rvCJQhWzr}luZ|><~+++__--?
]]]?--_+~<>>i!lI!|C_Yf1zddwv?!>j+~(f+.ltJOqhM$ /..����^^^>uJ\|t}/(Il!!i><~++___--?
[]]?-__++~+i>[tv0Cf0h*wY{<,�����.....>uOCZphM@ h0x_����^^^"l]nYm&{Ill!i><<+_____-?
]]??--!!-xUxJL0kM8W*BCl^^�����.....Ic&$dQmdoM  8MpY����^^^^""hBBB<<+_____-?
]]?-?I�,irzp*8B&pnrj(I^^^����.....__ro$qUxY0ZqZCZX^�����^^^^[%BBo;Ill!!i>~++____-?
]]1\^Il|jY&8oCt~;::,""^^�����....I(uC&8a>{nYLZb#*;������^^^;aBBBz;IIl!!i><~+__-_-]
?1J0>(zwdpJUillI;:,,"^^^����.�~}um*Yfo@qpko#8@8B@d(������^IpB@@&i;IIll!i><~+__--?]
?1w#wdM*o1z}!llI;:,""^^^���,!1z0dhY1/zvaZpdbbk%B%B m:����]oB@@@\:;IIll!i><~++__-?]
??QCnr)/_>>i!llI;:,""^^^�,l}uQdhoX??\UvqUQapa*o#M%$ MJr{L%@@$$u,:;IIIl!i><~+++_-?]
??--__+~<<>ii!lI;:,""^^"_tzXXUL0m{?[Xx0dYQpdqqpbha#8@  @%W&$$j",:;;Ill!i><~++_--?]
??--__+~~<>>i!lI;:,""I>}{1jYmbaaar|z1\Z&dpmZwwqqpko8$&okpZZJ}"",::;IIl!i><~++__-?]
??--__++~~<>i!lI;::;!_|cOk#8@$$@@*n\vwB an)|rvvvXUL0wa8$ @Mf"",,::;Ill!i><~++__-?]
??--__+++~<>>!lI;Ii{nCbW$$$&8@  $ZOUwXrphYUUXcXCOqa&@     Bwx>,,:;;Ill!i><~++__-?]
??--___++~~<>i!lI1zqW@B$ BahM&@ hOXXmz__JQUJQZwwqpk*8$ Mq0mM$d{;:;IIl!!i><~++_--?]
??--___++~~<>ii~Q&$ $$$ #qdbaWBWCLczwdf>inCC0ZwwqdaWBqt1\umMW&W+:;IIl!!i<<~++_--?]
??--___+++~<>>~dB $@@  dZpbkaMWxOuvcpb#]^:zL0Zwwqd*Z[i!~)Ua8B@@#v!IIl!i><~~+__-?]]
??--___+++~~<<>Q @@$ dOOqbhokw(JffxCLoBa;:_LOZwqpd|l!!i[O&%8@$$$@d_Il!i><~++_-??][
??---___++~~<~+__-][[}
??--____+++~~<#%B  M"\nC@  $]linZmj,I!i|Cp8&%%hZZk@  oc]!><~~+_-?]}}}
]?---____++~~n*%   v.i(O0_-1![\(#$   bII>)n��;~xCo88B0\txJ#88&##Xi>~~~_-?][}{{
]?---__-_++~~dW$   |^?xL],(li!>!})-w$ @@$ (:!~Xl�+cqMaMq}<{/YdM@@% 8_<<~++_-?]}{11
]??---??-_+~n#$    j|1{QWBB$ $  z<~++_-?][}{1)
]]??-???--_\hB     q}uCLC;}{(){_>0$ B&88%B {,I!|q*kaO_!!+YM%B@8B@   B|~+_--?]}{{1)
[]???????-[m&       zQZo#il;;;l~Z$  M&888% w^:(hpkMn>[!\a8B8%@@$     %(__-?][}{1))
]]???????-Ya$$$$$    pM@ j!i~{rkB8@ #MW&&%#Y,rkZahdh*kMdj_?[/ZW&8@B%WL(}}{{1){
++~~~~~_+dWW&W8%@$ Z~I(~|nt[i>v   <.!t[h&$B}I!;Ixhwopbkh*bt<<<~!fM*khM8@  Bt!>1>!!!i18$ &l�}cxp&% QIII\Jwbddhhhx~i!!>?\0W8mq&%%&&)[}{{}{{
+<<>>><<<0ppo%@@8*qCn(!!i-1/08u[[[i,tCzqko@%ili?fZqbkoY>Il!><1Z@qj-_r*8&Wz-]]][[}}
+<<>>>>>}dW8#On(]+~~-LruLQLUu};:::I[C&Q}+++_?Ja#J_-_-????]
_~<>>>~!/pLf[---_+~~III;;;;:IQwwa*opLZl!!]dkY<:��;~fYv[++++_++{Qn_+++++__-?
-+~<<>><)?~+_---_++~<~)><<<+_----_+~~~<<>>i!!llllIII|ZazC0p#$r>><<<~+_
?-_+~<<<<<~~+_---_++++~<<>>iii!!!!ll>>ii>>><~++
]?-_+~<<<<~~+_---___++++~<<>>>iiii!!!?\-rCLw*&o0+i;Inh1+++_____-_++~<>iiiiiii><<~+
???-_+~~<~~+_---?-______++~<<>>>>>i>iii>-YLObawm~+,UO?___-__--___++<<>ii!!ii>><~+_
[?-?-_+~~~~+_-???---__-___++~~~~<<><<><>i!!iii><<~_[
r|???-_++~++_-??]?--_--??-___++++~~~~~~~[Uzvd&&k]_-------------_++~<>iiiii>><~+]/j
rj/]?--_+++_--?]]?--_--????-_____++++++!:_uUw*aMo\-------?----__++~>>>ii>><<~+1fjr
rjf/[?--____--?]]?-?-???]]]??-----____+_\q*#bcOMB#[-??---?-----_++~<<>>><<~++)tjrx
rjff\]?-----??]??--?????]]]]]??????---___}c\+jQoBBz?]????????--__+~~<<<<~~+_}/fjxn
xrjft{]?---???]???-__-???]][[[]]]]]??-----+!<{?>\q88f1111{{}}]]????--_+~+--??]][[}}UJ
CJUYv)]]]????|||||()}----???][}{{11111-
			    	

Data Science based ASCII Art Generator

Our goal was to generate ASCII art using PCA by taking 256 ASCII character images (each the same size as the patch), computing the PCA of each patch, and then selecting the closest ASCII character based on the L2 norm of their PCA components. You tested different PCA component sizes (3, 5, and 7) and observed that the output primarily captured the outline of the image rather than the detailed structure seen in grey level 10-based ASCII conversion.

Why the Output is Mostly an Outline:

The reason for this outcome lies in how PCA works. PCA reduces dimensionality by focusing on the most significant variations in the data, which are usually the dominant structural features—edges and contours—while discarding finer intensity variations. Since our selection process was based on minimizing the L2 norm between image patches and ASCII characters in PCA space, the algorithm naturally favored ASCII characters that best matched the strongest variations, which are typically edges. As a result, the final ASCII representation emphasized the outline of the image while losing detailed shading and texture.

Unlike grey level-based mapping, which directly converts brightness levels into ASCII characters and retains tonal transitions, PCA-based mapping prioritizes structural information over brightness. This explains why the result looks more like an edge-detected version of the original image rather than a smooth, gradient-rich ASCII representation.

Using 3, 5, or 7 PCA components did not lead to significantly different results because the first few principal components capture the most dominant variations, which are usually edges and high-contrast regions. Since most image structure is already represented in the first few components, adding a couple more (from 3 to 5 or 7) does not drastically change the feature representation. The later components capture finer details and noise, but their contribution is minimal. As a result, all three cases emphasized edges similarly, with only slight variations in minor details, leading to nearly identical ASCII outputs.

Why Smaller Patch Size Improves the Result:

When the patch size is smaller, the ASCII conversion becomes more detailed because each ASCII character represents a smaller portion of the original image. This increases the resolution of the ASCII output, allowing for better preservation of finer structures and localized variations in brightness.

With larger patches, each patch represents a more significant portion of the image, averaging out important details. This leads to a loss of texture and subtle variations, reinforcing the dominance of strong edges. However, when smaller patches are used, PCA can better capture localized features, allowing the L2 norm-based matching to find ASCII characters that more accurately represent the local structure rather than just the global edges.

Original Image
Original Image
ASCII Art - PCA components 3
ASCII Image - PCA components 3 (new width: 80;
font-style: Arial)
ASCII Art - PCA components 5
ASCII Image - PCA components 5 (new width: 80;
font-style: Arial)
ASCII Art - PCA components 7
ASCII Image - PCA components 7 (new width: 80;
font-style: Arial)

Comparing Art of Two Different Font-Style:

The reason different fonts (Arial and Times New Roman) did not significantly impact the ASCII art but resulted in different character selections is due to differences in character shape and spacing rather than structural features. PCA primarily captures the dominant variations (edges and contrast) , which remain similar across fonts, leading to nearly identical overall ASCII representations. However, because Times New Roman has more variations in stroke width and serifs, while Arial is more uniform and sans-serif, the specific ASCII characters chosen based on L1 norm differed slightly. These differences affected character mapping but not the overall structural output of the ASCII art.

ASCII Art - PCA components 3
ASCII Image - PCA components 3 (new width: 80;
font-style: Times New Roman)
ASCII Art - PCA components 5
ASCII Image - PCA components 5 (new width: 80;
font-style: Times New Roman)
ASCII Art - PCA components 7
ASCII Image - PCA components 7 (new width: 80;
font-style: Times New Roman)

goto top ^

                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                        Ĩ/Ĩ                                                 
                        Ĩ ĨĨĨĨ                                              
                             ĨĨĨ                                            
                               ĨĨ                      ĨĨĨĨĨ                
                     Ĩ          Ĩ                    ĨĨ     ĨĨ              
                     |           Ĩ                  Ĩ         Ĩ             
                                 Ĩ                 Ĩ           Ĩ            
                    |            ļ                ĨĨ           Ĩ            
                           u±j «ñĨĨ               Ĩ     įuj     Ĩ           
                         jn  u uĨıí Ĩ Ĩ                «ì  u                
                     juu«ı ĨÕı ĨĨĨ^°ĨV ĨĨ         Ĩ    ı   |ı   ı           
                    |ĨĨ ¡ ĨııĨ Ĩ   įkj/ĸ'ĨĨĨ          ı       | ı           
                     |µ}Ĩ{«hhı   ıĨuĨ³ÿĨ|łjĨÃĨ    ı   Ĩ     ı   ı      ĨĺĨ  
                      ıvµ |¡Ĩı  ı ı¹¹ĨĨ/vvuıìu    u   ĨĨ    u  ı|  }ļ| /  Ĩ 
                       ıįĨ¹ wĨ ı  Ĩıı  |Ĩ³¹Ĩ ĨĨ   ıı:  Ĩ     ıu|ĺĨĨ}ĨĨĨ «ni 
                       ĨĨ|ĺ` Ĩı    Ĩw;     |ıĨĨ ĨĨ°ÃÃĨ¡uļĨ  ĺĨĨĨ ĨĨ jĨ¡ı|   
                       |ı×IĨĨ|  |\ ĨĨıvį :   /u«µijĪ ;n| Ĩ}}Ĩ Ĩ  junuuį|     
                        ĨĨĨĨı    ı   ĨĨįùı««ĩı}\ĨĨı u ĨÃu   |»nI            
                        j į\     jì ·ıĨ¯ĨĨĨĨĨ u Ĩı u|ĺĨı Ĩ  ĨĨ              
                        Ĩıì       ıı |        ıĨıw ı Ĩ ı   ·ĨĨ              
                       Ĩ|        ı ¦ıı|  ñªuĨj ĨıĨı ĨĨu   ııııĨ             
                       ¡auļ     ÍĨ| ļ·ıı `ĨĨĨj Ĩ|/ı Ĩı|       ĨĨ            
                         Ĩ)     ıııı|ııı  wuĸI| ĨĨ| Ĩı      '  Ĩĺ           
                       ĨĨĨ    Ĩıı   ĨĨĨĨ ij|    j  ĨĨĨ           Ĩ           
                       Ĩ   /Ĩļaıļ`ıíį    v    Ĩı\ ĨĨĨ          ı            
                      /uuĨľ!  ĨĨ      ļ  Ĩ/   y;ĨĨju«      jjvv ı           
                  Ĩļy)|ĨĨĨ Ĩ (uĨĨĨĨĨĨĨĨ`'ł«¦   ıajĨ ııv    ı«ıĨ*            
            Ĩ(Ĩķ\ı|ĨÃĨĨv»Ĩıu ĨĨ uĨ|Ĩı    n«      įaĨııwÌÍjwıı vu«           
          ĨĨfĨĨĨÃĨĨ}»uvìnaµıµun vı                 ıu/ II|Ĩı                
    Ĩ ĺĨĨĨ «µĨĨ vu»ıį          ÃĨĨ       Ĩ¯ĨĀ        )wĨĨĨĨı                
ıı ır}Ĩ^ĨĨĨ  ı u)            ĨĨ} ı        j «          Ĩ   ı                
ı   uĨĨĨĨ ıuwuĨmı            {pn| `«±±v»«nìĨwį         Ĩ   ı                 
ĨĨ|ĨĨĨĨĨ`ıjvm)  ||             Ĩ°Ĩı  «ıĨĨĨÃĨĨĨ¿¹         ĨĨ   ı                 
^`ĨĨĨ  ın¡|                 ÃÃĨĨĨĸļv:VĨ¹/   ı` ĨÃĺ      ĨĨ   «ı                 
ĨĨĨuĨĨuıyy              ĺ/¦v»v--wj¿}V("ıı||ĨĨ·^ĩ ĨĨ    ĨĨ    w                  
vuau¡µ|                 ÏĨ°¨¨*Ĩwıı/ijļı|    j ||   Ĩ¯ĨĨĨ     w                   
                 ĺĨĨ}-v««uĸı`ĨuaĨĨ i|     || ı     rı  a                    
               Ĩ{uk/ĨĨ¯ĨĨ·-·vĨvĨÅ \¡           j»ı¹ĨĨVw                     
             ıi/ĨĨ ĨĨ    ` ĨĨĨĨ}  uĨMn«±±»«ĸıľĨĨ`   ı»                      
            ĨĨĨĨ^Ĩ   ı     |ı ·uįw  ıĵ¨ĨĨĨ¯Ĩ |      jĨĨ'                    
           ĨĨ/Ĩ    jı     ıĨ| ıĨĨ)n              vu¡ | ĨĨĨ                  
         ĨĨĨ      ı|     uĨı  ııV )«           unı  ļıì 'Ĩ                  
                 ı      «ıw   ĨĨĨV |ı        vĸ|    /ļ·` ĨĨĨ                
         ł     u)     jo¡Ĩ|  ĨıĨ /Ĩ ı¡     «n    ĨĨļ       ļ/               
        ĨĨ    ÀĨwļjvnIwjwııj|u Ĩ  /  ı    uì   ĨĨ `    įı' ĨĨ(              
      iĨĨ    ujĨj1ĨĨuıĨwı(ı!ĨuĨ   Ĩ/  u  w|   Ĩ /    uııı   ĺĨĨ             
       '|    ı ìĨ ±uĨkí:(ĨĨĨwĨĨ    Ĩ  wpľ   ĨĨĨĨ   ±¡   Ĩı| ;\ı             
       Ĩ        ı Ĩ|Ĩ(;Ĩ·Ĩ/µ Ĩ      Ĩ iiì  ĨĨĨ   uĸļĨ  ^Ĩ    ıı             
      Ĩ      Ĩ    Ĩ Ĩ¦(jļĨwĨĨ       Ĩ |;ı|ĨĨ   ;w|  ĨĨĨ `     Ĩ             
     Ĩ       Ĩ  ĨĨĨ uĨĶyĸIĨĨ         Ĩ   ĨĨ Ĩ u¡  ĨĨĨ |       ĨĨ            
    ĨĨ        ĨĨuĨ/Ĩ     ĨĨ   |      Ĩ  Ĩ¡  įw(Ĩ ĨĨ            ĨĨ           
    Ĩ          #ļ  Ĩ  ĨĨĨĨjjı       ınıĨĨĨ ;u |ıĨ`              ĨĨ          
   ĨĨ             uıĨĨÍ ıı|/ j     ıĨuĨVı uı  V               ıif}}         
   Ĩ            um¹ı| | Ĩ|(/unIwju|Ĩu ıı u¡  Ĩ/ı/         «ı'Ĩ   Ĩ/Ĩ        
  /Ĩ         j±mĨµ| |  Ĩı / w«Ĩ ¡ĨĨ ı  jujĨ Ĩ/|Ĩı /    uwį        Ĩ         
  Ĩ     · (  ı ıu (  Ĩ}u /  ı |ĨıĨ  Ĩ  ı| iĨļ|Ĩı     vm¦ì  Í ;ı   ·ÿĨ       
  ıvj(' ı    ĨĨ ĨÍĨĶw¡| Ĩ   ı  `Ĩı  ĨĨ ı/ Ĩı Ĩ|Ĩ   ua | ıĨ·ıÏĨ'  ·  Ĩ       
 ı /Ĩı|      ĨĨĨıu|    ĨĨ  ıĨ        Ĩ   Ĩy ı    ;m¦|    ĨÃĨj±w'   jı       
 Ĩ/Ĩı Ĩ  jj±uu«Ĩ   Ĩ/ĨĨĨu¶µµĨ    ı»; ĨĨ \ı«     v)|    ĨĨĨua| ıı   u        
 ıĨĨĨ ı¡«ıį   ı ĨĨĨ  vwĸ|   ıı Ĩ (Ĩ |ıĨ       «u)    /Ĩj±¡    |ıj «|        
 ĺ uun|        ı junį        ìvvĨı  'ĨĨ   ı  wį    /Ĩ:wI       ;;u|         
  w)           |ı|            ı×kı|| Ĩ}   ı;Y    i/ ıı          |           
                              ıı/(     ĨĨĨVr Ĩ  ĨĨ«ı                        
                              |·¦/     ĨĨıuĨ ı ĨĨu|                         
                               ınìı     ı«ıĨ  Ĩuı                           
                                  ı;   u/ı  Ĩë|                            
                                  ļ    Ĩj'  «w                             Ĩ
Ĩ                                     ;ıvvuį  ĨĨ                              Ĩ  
                                 ĨĺĨÃVĨı\ ĨĨ                            Ĩ   
                                  ıį  vıį  ĨĨ                               
                                   ı»u|ĨĨ·  Ĩ                               
                                    /ĨÃ ĨĨ                           Ĩ      
                                    ||   Ĩı ı                               
                                     Ĩ    Ĩı/ı                              
ıı|                                    Ĩ      /ı                               
ı|                                      Ĩ³ľn«  ıuı                     ·ı||||iı  
`Ĩ                                      )«»m/\ı  ı                     |       ı  
Ĩ                                   / \·ıı Ĩ ıı                                
Ĩ                                ıııĨ  ĨĨ /ı                                 
Ĩ                                 ı ĨĨĨ   *ĨĨ ĺĨļ                           
 Ĩ                          \   ıĨ Ĩ       jĨįvı                        Ĩ   
  Ĩ      |ı                   / Ĩıv««ıı(jı\ ıĨĨ                       ĨĨ    
   Ĩ       |ı                 |`|vļ""Ĩ ı    v«|     ı              ı        
             ı                      ı      ı|     ı|              ĨĨĨ       
                                           ı    ı|                   ıı| |ı 
                                           ı   ı|                   ı ĨĨĨĨ  
                                              ı|                   ıĨĨ      
         ĺ                                 ı                      jĨ        
||ıj         ıı|||         '¦  Ĩ      Ĩ        ıı                                 
ı      ı            |  j ı   Ĩ   ı|       ıı                    ·             
|ı   |              |ı  ìıj     ı       |ı  ı|              jı   ||ıı        
Ĩ     ı                   |ı  ĨĨÌı   ı       ı                  ı|        ı       
ĨĨ    ı                   ı        ı               ·        · ı|          ı      
Ĩ                        ı                     ı|          ||                  
     Ĩ                        ĨĨ          ı|                                
      ĨĨ                   ı             |                                  
ıı|||||iı«   ĨĨĨĨĨĨ       ıııı  ļ          ı|                                   
(ĨĨĨĨĨ     |ıj                 |ıį         ı|                          ĨĨ        
 ĨĨ     |ı                  |ı        ı                                     
    Ĩ     ıııııĨ              ı     jı                            Ĩ         
     ĨĨ     ĨĨ''               ıj  ı                            ĨĨ          
       Ĩ    ı              Ĩ` ļ |jı                     ĨĨĨĨĨĨĨ             
        Ĩ   |ı                                                              
        Ĩ                                Ĩ                                  
         Ĩ                                  ĨĨĨĨ       |                    
                                    Ĩ                                       
            Ĩ                                                               
         ı Ĩ                                                                
        `Ĩ                                                                  
                                                                            

            
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                        Ĩ/Ĩ                                                 
                        Ĩ ĨĨĨĨ                                              
                             ĨĨĨ                                            
                               ĨĨ                      ĨĨĨĨĨ                
                     Ĩ          Ĩ                    ĨĨ     ĨĨ              
                     |           Ĩ                  Ĩ         Ĩ             
                                 Ĩ                 Ĩ           Ĩ            
                    |            ļ                ĨĨ           Ĩ            
                           u±j «MĨĨ               Ĩ     įuj     Ĩ           
                         jn  u uĨıí Ĩ Ĩ                «ì  u                
                     juu«ı ĨÕı ĨĨĨ^°ĨV ĨĨ         Ĩ    ı   |ı   ı           
                    |ĨĨ ¡ ĨııĨ Ĩ   įkj/ĸ'ĨĨĨ          ı       | ı           
                     |µ}Ĩ{«hhı   ıĨuĨ³ÿĨ|łjĨÃĨ    ı   Ĩ     ı   ı      ĨĺĨ  
                      ıvµ |¡Ĩı  ı ı¹¹ĨĨVvvuıìu    u   ĨĨ    u  ı|  }ļ| /  Ĩ 
                       ıįĨ¹ wĨ ı  Ĩıı  |Ĩ³¹Ĩ ĨĨ   ıı:  Ĩ     ıu|ĺĨĨ}ĨĨĨ «ni 
                       ĨĨ|ĺ` Ĩı    Ĩw;     |ıĨĨ ĨĨ°ÃÃĨ¡uļĨ  ĺĨĨĨ ĨĨ jĨ¡ı|   
                       |ı×IĨĨ|  |\ ĨĨıvį :   /u«µijĪ ;n| Ĩ}}Ĩ Ĩ  junuuį|     
                        ĨĨĨĨı    ı   ĨĨįùı««ĩı}\ĨĨı u ĨÃu   |»nI            
                        j į\     jì ·ıĨ¯ĨĨĨĨĨ u Ĩı u|ĺĨı Ĩ  ĨĨ              
                        Ĩıì       ıı |        ıĨıw ı Ĩ ı   ·ĨĨ              
                       Ĩ|        ı ¦ıı|  ñªuĨj ĨıĨı ĨĨu   ııııĨ             
                       ¡auļ     ÍĨ| ļ·ıı `ĨĨĨj Ĩ|/ı Ĩı|       ĨĨ            
                         Ĩ)     ıııı|ııı  wuĸI| ĨĨ| Ĩı      '  Ĩĺ           
                       ĨĨĨ    Ĩıı   ĨĨĨĨ ij|    j  ĨĨĨ           Ĩ           
                       Ĩ   /Ĩļaıļ`ıíį    v    Ĩı\ ĨĨĨ          ı            
                      /uuĨľ!  ĨĨ      ļ  Ĩ/   y;ĨĨju«      jjvv ı           
                  Ĩļy)|ĨĨĨ Ĩ (uĨĨĨĨĨĨĨĨ`'ł«¦   ıajĨ ııv    ı«ıĨ*            
            Ĩ(Ĩļ\ı|ĨÃĨĨv»Ĩıu ĨĨ uĨ|Ĩı    n«      įaĨııwÌÍjwıı vu«           
          ĨĨfĨĨĨÃĨĨ}»uvìnaµıµun vı                 ıu/ II|Ĩı                
    Ĩ ĺĨĨĨ «µĨĨ vu»ıį          ÃĨĨ       Ĩ¯ĨĀ        )wĨĨĨĨı                
ıı ır}Ĩ^ĨĨĨ  ı u)            ĨĨ} ı        j «          Ĩ   ı                
ı   uĨĨĨĨ ıuwuĨmı            {pn| `«±±v»«nìĨwį         Ĩ   ı                 
ĨĨ|ĨĨĨĨĨ`ıjvm)  ||             Ĩ°Ĩı  «ıĨĨĨÃĨĨĨ¿¹         ĨĨ   ı                 
^`ĨĨĨ  ın¡|                 ÃĨĨĨĨĸļv:VĨ¹/   ı` ĨÃĺ      ĨĨ   «ı                 
ĨĨĨuĨĨuıyy              ĺ/¦v»v--wj¿}V("ıı||ĨĨ·^ĩ ĨĨ    ĨĨ    w                  
vuau¡µ|                 ÏĨ°¨¨*Ĩwıı/ijļı|    j ||   Ĩ¯ĨĨĨ     w                   
                 ĺĨĨ}-v««uĸı`ĨuaĨĨ i|     || ı     rı  a                    
               Ĩ{uí/ĨĨ¯ĨĨ·-·vĨvĨÅ \¡           j»ı¹ĨĨVw                     
             ıi/ĨĨ ĨĨ    ` ĨĨĨĨ}  uĨMn«±±»«ĸıľĨĨ`   ı»                      
            ĨĨĨĨ^Ĩ   ı     |ı ·uįu  ıĵ¨ĨĨĨ¯Ĩ |      jĨĨ'                    
           ĨĨ/Ĩ    jı     ıĨ| ıĨĨ)n              vu¡ | ĨĨĨ                  
         ĨĨĨ      ı|     uĨı  ııV )«           unı  ļıì 'Ĩ                  
                 ı      «ıw   ĨĨĨV |ı        vĸ|    /ļ·` ĨĨĨ                
         ł     u)     jo¡Ĩ|  ĨıĨ /Ĩ ı¡     «n    ĨĨļ       ļ/               
        ĨĨ    ÀĨwļjvnIwjwııj|u Ĩ  /  ı    uì   ĨĨ `    įı' ĨĨ(              
      iĨĨ    ujĨj1ĨĨuıĨwı(ı!ĨuĨ   Ĩ/  u  w|   Ĩ /    uııı   ĺĨĨ             
       '|    ı ìĨ ±uĨŀí:(ĨĨĨwĨĨ    Ĩ  wpľ   ĨĨĨĨ   ±¡   Ĩı| ;\ı             
       Ĩ        ı Ĩ|Ĩ(;Ĩ·Ĩ/µ Ĩ      Ĩ iiì  ĨĨĨ   uĸļĨ  ^Ĩ    ıı             
      Ĩ      Ĩ    Ĩ Ĩ¦(jļĨwĨĨ       Ĩ |;ı|ĨĨ   ;w|  ĨĨĨ `     Ĩ             
     Ĩ       Ĩ  ĨĨĨ uĨĶyĸIĨĨ         Ĩ   ĨĨ Ĩ u¡  ĨĨĨ |       ĨĨ            
    ĨĨ        ĨĨuĨ/Ĩ     ĨĨ   |      Ĩ  Ĩ¡  įw(Ĩ ĨĨ            ĨĨ           
    Ĩ          #ļ  Ĩ  ĨĨĨĨjjı       ınıĨĨĨ ;u |ıĨ`              ĨĨ          
   ĨĨ             uıĨĨÍ ıı|/ j     ıĨuĨVı uı  /               ıif}}         
   Ĩ            um¹ı| | Ĩ|(/unIwju|Ĩu ıı u¡  Ĩ/ı/         «ı'Ĩ   Ĩ/Ĩ        
  /Ĩ         j±mĨµ| |  Ĩı / w«Ĩ ¡ĨĨ ı  jujĨ Ĩ/|Ĩı /    uwį        Ĩ         
  Ĩ     · (  ı ıu (  Ĩ}u /  ı |ĨıĨ  Ĩ  ı| iĨļ|Ĩı     vm¦ì  Í ;ı   ·ÿĨ       
  ıvj(' ı    ĨĨ ĨÍĨĶw¡| Ĩ   ı  `Ĩı  ĨĨ ı/ Ĩı Ĩ|Ĩ   ua | ıĨ·ıÏĨ'  ·  Ĩ       
 ı /Ĩı|      ĨĨĨıu|    ĨĨ  ıĨ        Ĩ   Ĩy ı    ;m¦|    ĨÃĨj±w'   jı       
 Ĩ/Ĩı Ĩ  jj±uu«Ĩ   Ĩ/ĨĨĨu¶µµĨ    ı»; ĨĨ \ı«     v)|    ĨĨĨua| ıı   u        
 ıĨĨĨ ı¡«ıį   ı ĨĨĨ  vwĸ|   ıı Ĩ (Ĩ |ıĨ       «u)    /Ĩj±¡    |ıj «|        
 ĺ uun|        ı junį        ìvvĨı  'ĨĨ   ı  wį    /Ĩ:wI       ;;u|         
  w)           |ı|            ı×µı|| Ĩ}   ı;Y    i/ ıı          |           
                              ıı/(     ĨĨĨVr Ĩ  ĨĨ«ı                        
                              |·¦/     ĨĨıuĨ ı ĨĨu|                         
                               ınìı     ı«ıĨ  Ĩuı                           
                                  ı;   u/ı  Ĩë|                            
                                  ļ    Ĩj'  «w                             Ĩ
Ĩ                                     ;ıvvuį  ĨĨ                              Ĩ  
                                 ĨĺĨÃÃĨı\ ĨĨ                            Ĩ   
                                  ıį  vıį  ĨĨ                               
                                   ı»u|ĨĨ·  Ĩ                               
                                    /ĨÃ ĨĨ                           Ĩ      
                                    ||   Ĩı ı                               
                                     Ĩ    Ĩı/ı                              
ıı|                                    Ĩ      /ı                               
ı|                                      Ĩ³ľn«  ıuı                     ·ı||||iı  
`Ĩ                                      )«»m/\ı  ı                     |       ı  
Ĩ                                   / \·ıı Ĩ ıı                                
Ĩ                                ıııĨ  ĨĨ /ı                                 
Ĩ                                 ı ĨĨĨ   *ĨĨ ĺĨļ                           
 Ĩ                          \   ıĨ Ĩ       jĨįvı                        Ĩ   
  Ĩ      |ı                   / Ĩıv««ıı(jı\ ıĨĨ                       ĨĨ    
   Ĩ       |ı                 |`|vļ""Ĩ ı    v«|     ı              ı        
             ı                      ı      ı|     ı|              ĨĨĨ       
                                           ı    ı|                   ıı| |ı 
                                           ı   ı|                   ı ĨĨĨĨ  
                                              ı|                   ıĨĨ      
         ĺ                                 ı                      jĨ        
||ıj         ıı|||         '¦  Ĩ      Ĩ        ıı                                 
ı      ı            |  j ı   Ĩ   ı|       ıı                    ·             
|ı   |              |ı  ìıj     ı       |ı  ı|              jı   ||ıı        
Ĩ     ı                   |ı  ĨĨÌı   ı       ı                  ı|        ı       
ĨĨ    ı                   ı        ı               ·        · ı|          ı      
Ĩ                        ı                     ı|          ||                  
     Ĩ                        ĨĨ          ı|                                
      ĨĨ                   ı             |                                  
ıı|||||iı«   ĨĨĨĨĨĨ       ıııı  ļ          ı|                                   
(ĨĨĨĨĨ     |ıj                 |ıį         ı|                          ĨĨ        
 ĨĨ     |ı                  |ı        ı                                     
    Ĩ     ıııııĨ              ı     jı                            Ĩ         
     ĨĨ     ĨĨ''               ıj  ı                            ĨĨ          
       Ĩ    ı              Ĩ` ļ |jı                     ĨĨĨĨĨĨĨ             
        Ĩ   |ı                                                              
        Ĩ                                Ĩ                                  
         Ĩ                                  ĨĨĨĨ       |                    
                                    Ĩ                                       
            Ĩ                                                               
         ı Ĩ                                                                
        `Ĩ                                                                  
                                                                            

              
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                        Ĩ/Ĩ                                                 
                        Ĩ ĨĨĨĨ                                              
                             ĨĨĨ                                            
                               ĨĨ                      ĨĨĨĨĨ                
                     Ĩ          Ĩ                    ĨĨ     ĨĨ              
                     |           Ĩ                  Ĩ         Ĩ             
                                 Ĩ                 Ĩ           Ĩ            
                    |            ļ                ĨĨ           Ĩ            
                           u±j «MĨĨ               Ĩ     įuj     Ĩ           
                         jn  u uĨıí Ĩ Ĩ                «ì  u                
                     juu«ı ĨÕı ĨĨĨ^°ĨV ĨĨ         Ĩ    ı   |ı   ı           
                    |ĨĨ ¡ ĨııĨ Ĩ   įkj/ĸ'ĨĨĨ          ı       | ı           
                     |µ}Ĩ{«hhı   ıĨuĨ³ÿĨ|łjĨÃĨ    ı   Ĩ     ı   ı      ĨĺĨ  
                      ıvµ |¡Ĩı  ı ı¹¹ĨĨVvvuıìu    u   ĨĨ    u  ı|  }ļ| /  Ĩ 
                       ıįĨ¹ wĨ ı  Ĩıı  |Ĩ³¹Ĩ ĨĨ   ıı:  Ĩ     ıu|ĺĨĨ}ĨĨĨ «ni 
                       ĨĨ|ĺ` Ĩı    Ĩw;     |ıĨĨ ĨĨ°ÃÃĨ¡uļĨ  ĺĨĨĨ ĨĨ jĨ¡ı|   
                       |ı×IĨĨ|  |\ ĨĨıvį :   /u«µijĪ ;n| Ĩ}}Ĩ Ĩ  junuuį|     
                        ĨĨĨĨı    ı   ĨĨįùı««ĩı}\ĨĨı u ĨÃu   |»nI            
                        j į\     jì ·ıĨ¯ĨĨĨĨĨ u Ĩı u|ĺĨı Ĩ  ĨĨ              
                        Ĩıì       ıı |        ıĨıw ı Ĩ ı   ·ĨĨ              
                       Ĩ|        ı ¦ıı|  ñªuĨj ĨıĨı ĨĨu   ııııĨ             
                       ¡auļ     ÍĨ| ļ·ıı `ĨĨĨj Ĩ|/ı Ĩı|       ĨĨ            
                         Ĩ)     ıııı|ııı  wuĸI| ĨĨ| Ĩı      '  Ĩĺ           
                       ĨĨĨ    Ĩıı   ĨĨĨĨ ij|    j  ĨĨĨ           Ĩ           
                       Ĩ   /Ĩļaıļ`ıíį    v    Ĩı\ ĨĨĨ          ı            
                      /uuĨľ!  ĨĨ      ļ  Ĩ/   y;ĨĨju«      jjvv ı           
                  Ĩļy)|ĨĨĨ Ĩ (uĨĨĨĨĨĨĨĨ`'ł«¦   ıajĨ ııv    ı«ıĨ*            
            Ĩ(Ĩļ\ı|ĨÃĨĨv»Ĩıu ĨĨ uĨ|Ĩı    n«      įaĨııwÌÍjwıı vu«           
          ĨĨfĨĨĨÃĨĨ}»uvìnaµıµun vı                 ıu/ II|Ĩı                
    Ĩ ĺĨĨĨ «µĨĨ vu»ıį          ÃĨĨ       Ĩ¯ĨĀ        )wĨĨĨĨı                
ıı ır}Ĩ^ĨĨĨ  ı u)            ĨĨ} ı        j «          Ĩ   ı                
ı   uĨĨĨĨ ıuwuĨmı            {pn| `«±±v»«nìĨwį         Ĩ   ı                 
ĨĨ|ĨĨĨĨĨ`ıjvm)  ||             Ĩ°Ĩı  «ıĨĨĨÃĨĨĨ¿¹         ĨĨ   ı                 
^`ĨĨĨ  ın¡|                 ÃĨĨĨĨĸļv:VĨ¹/   ı` ĨÃĺ      ĨĨ   «ı                 
ĨĨĨuĨĨuıyy              ĺ/¦v»v--wj¿}V("ıı||ĨĨ·^ĩ ĨĨ    ĨĨ    w                  
vuau¡µ|                 ÏĨ°¨¨*Ĩwıı/ijļı|    j ||   Ĩ¯ĨĨĨ     w                   
                 ĺĨĨ}-v««uĸı`ĨuaĨĨ i|     || ı     rı  a                    
               Ĩ{uí/ĨĨ¯ĨĨ·-·vĨvĨÅ \¡           j»ı¹ĨĨVw                     
             ıi/ĨĨ ĨĨ    ` ĨĨĨĨ}  uĨMn«±±»«ĸıľĨĨ`   ı»                      
            ĨĨĨĨ^Ĩ   ı     |ı ·uįu  ıĵ¨ĨĨĨ¯Ĩ |      jĨĨ'                    
           ĨĨ/Ĩ    jı     ıĨ| ıĨĨ)n              vu¡ | ĨĨĨ                  
         ĨĨĨ      ı|     uĨı  ııV )«           unı  ļıì 'Ĩ                  
                 ı      «ıw   ĨĨĨV |ı        vĸ|    /ļ·` ĨĨĨ                
         ł     u)     jo¡Ĩ|  ĨıĨ /Ĩ ı¡     «n    ĨĨļ       ļ/               
        ĨĨ    AĨwļjvnIwjwııj|u Ĩ  /  ı    uì   ĨĨ `    įı' ĨĨ(              
      iĨĨ    ujĨj1ĨĨuıĨwı(ı!ĨuĨ   Ĩ/  u  w|   Ĩ /    uııı   ĺĨĨ             
       '|    ı ìĨ ±uĨŀí:(ĨĨĨwĨĨ    Ĩ  wpľ   ĨĨĨĨ   ±¡   Ĩı| ;\ı             
       Ĩ        ı Ĩ|Ĩ(;Ĩ·Ĩ/µ Ĩ      Ĩ iiì  ĨĨĨ   uĸļĨ  ^Ĩ    ıı             
      Ĩ      Ĩ    Ĩ Ĩ¦(jļĨwĨĨ       Ĩ |;ı|ĨĨ   ;w|  ĨĨĨ `     Ĩ             
     Ĩ       Ĩ  ĨĨĨ uĨĶyĸIĨĨ         Ĩ   ĨĨ Ĩ u¡  ĨĨĨ |       ĨĨ            
    ĨĨ        ĨĨuĨ/Ĩ     ĨĨ   |      Ĩ  Ĩ¡  įw(Ĩ ĨĨ            ĨĨ           
    Ĩ          #ļ  Ĩ  ĨĨĨĨjjı       ınıĨĨĨ ;u |ıĨ`              ĨĨ          
   ĨĨ             uıĨĨÍ ıı|/ j     ıĨuĨVı uı  /               ıif}}         
   Ĩ            um¹ı| | Ĩ|(/unIwju|Ĩu ıı u¡  Ĩ/ı/         «ı'Ĩ   Ĩ/Ĩ        
  /Ĩ         j±mĨµ| |  Ĩı / w«Ĩ ¡ĨĨ ı  jujĨ Ĩ/|Ĩı /    uwį        Ĩ         
  Ĩ     · (  ı ıu (  Ĩ}u /  ı |ĨıĨ  Ĩ  ı| iĨļ|Ĩı     vm¦ì  Í ;ı   ·ÿĨ       
  ıvj(' ı    ĨĨ ĨÍĨĶw¡| Ĩ   ı  `Ĩı  ĨĨ ı/ Ĩı Ĩ|Ĩ   ua | ıĨ·ıÏĨ'  ·  Ĩ       
 ı /Ĩı|      ĨĨĨıu|    ĨĨ  ıĨ        Ĩ   Ĩy ı    ;m¦|    ĨÃĨj±w'   jı       
 Ĩ/Ĩı Ĩ  jj±uu«Ĩ   Ĩ/ĨĨĨu¶µµĨ    ı»; ĨĨ \ı«     v)|    ĨĨĨua| ıı   u        
 ıĨĨĨ ı¡«ıį   ı ĨĨĨ  vwĸ|   ıı Ĩ (Ĩ |ıĨ       «u)    /Ĩj±¡    |ıj «|        
 ĺ uun|        ı junį        ìvvĨı  'ĨĨ   ı  wį    /Ĩ:wI       ;;u|         
  w)           |ı|            ı×µı|| Ĩ}   ı;Y    i/ ıı          |           
                              ıı/(     ĨĨĨVr Ĩ  ĨĨ«ı                        
                              |·¦/     ĨĨıuĨ ı ĨĨu|                         
                               ınìı     ı«ıĨ  Ĩuı                           
                                  ı;   u/ı  Ĩë|                            
                                  ļ    Ĩj'  «w                             Ĩ
Ĩ                                     ;ıvvuį  ĨĨ                              Ĩ  
                                 ĨĺĨÃÃĨı\ ĨĨ                            Ĩ   
                                  ıį  vıį  ĨĨ                               
                                   ı»u|ĨĨ·  Ĩ                               
                                    /ĨÃ ĨĨ                           Ĩ      
                                    ||   Ĩı ı                               
                                     Ĩ    Ĩı/ı                              
ıı|                                    Ĩ      /ı                               
ı|                                      Ĩ³ľn«  ıuı                     ·ı||||iı  
`Ĩ                                      )«»m/\ı  ı                     |       ı  
Ĩ                                   / \·ıı Ĩ ıı                                
Ĩ                                ıııĨ  ĨĨ /ı                                 
Ĩ                                 ı ĨĨĨ   *ĨĨ ĺĨļ                           
 Ĩ                          \   ıĨ Ĩ       jĨįvı                        Ĩ   
  Ĩ      |ı                   / Ĩıv««ıı(jı\ ıĨĨ                       ĨĨ    
   Ĩ       |ı                 |`|vļ""Ĩ ı    v«|     ı              ı        
             ı                      ı      ı|     ı|              ĨĨĨ       
                                           ı    ı|                   ıı| |ı 
                                           ı   ı|                   ı ĨĨĨĨ  
                                              ı|                   ıĨĨ      
         ĺ                                 ı                      jĨ        
||ıj         ıı|||         '¦  Ĩ      Ĩ        ıı                                 
ı      ı            |  j ı   Ĩ   ı|       ıı                    ·             
|ı   |              |ı  ìıj     ı       |ı  ı|              jı   ||ıı        
Ĩ     ı                   |ı  ĨĨÌı   ı       ı                  ı|        ı       
ĨĨ    ı                   ı        ı               ·        · ı|          ı      
Ĩ                        ı                     ı|          ||                  
     Ĩ                        ĨĨ          ı|                                
      ĨĨ                   ı             |                                  
ıı|||||iı«   ĨĨĨĨĨĨ       ıııı  ļ          ı|                                   
(ĨĨĨĨĨ     |ıj                 |ıį         ı|                          ĨĨ        
 ĨĨ     |ı                  |ı        ı                                     
    Ĩ     ıııııĨ              ı     jı                            Ĩ         
     ĨĨ     ĨĨ''               ıj  ı                            ĨĨ          
       Ĩ    ı              Ĩ` ļ |jı                     ĨĨĨĨĨĨĨ             
        Ĩ   |ı                                                              
        Ĩ                                Ĩ                                  
         Ĩ                                  ĨĨĨĨ       |                    
                                    Ĩ                                       
            Ĩ                                                               
         ı Ĩ                                                                
        `Ĩ                                                                  
                                                                            

            
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                        \'                                                 
                        \\\                                              
                          \\`                                            
                            \'                      \\\\\                
                  '          \                    \\     \\              
                  |           '                  '         '             
                 \            '                 \           '            
                 |            \                \\            \           
                  \     ėė¿ ú* \               \     ;ıı                 
                 \    sä  ä á ||                    uĵ  á    \           
                 /¡ėæıä ¶Õ||Ĩ\\¶¶\\ "*         \    à   |¡   |           
                 |'\ ĵ '«|    \ ;å|\ă^\¯*      |   |       |||           
                  |ăÕ¶/sãã|   / à\*\'|ļ¿ Ĩ     /         ¡   ¡    \\\ *  
                   |¿ą |ĵ'|  |\|**  \{e¡/|à    í   \\    à: ì   \\| \\   
                    ä| \ ä\ |  '|¡  |¶³³  Ĩ\   |s;  \     äâ| *\/\ \ áä| 
                    " |   \|   \"à¡|    || \ "*¶¶¶¶ïn\    *°¯ \  ¿\¡à|   
                    |ĵ))Ĩ¶|  |/  ¶ăú; ;   \¡¡ăľ¯ ¦ä| ³¯  /   ıàāáá||     
                     \\\ | |  | ; ¶Ĩ|ĵ«au\s¯/*\| à  Ĩà   |eä|            
                     | ¡/     || ·| ¯³*Ĩ*'/à Ĩ||à| Ĩ¡   \'\              
                     's|      :¡| \        ¡\/â á \//   ·\\              
                    '|        ¡|¦·¡|  Ĵ*á ¡ \|'/ \\¡   ||¡|\             
                    ĵāa\     \'| \·í¡ '\"\¿ \|\| 'à|        '            
                      \|     ¡|/|||¡¡ ;øėä||  *| '|      '  '            
                     ¶\     ¡ì    '\  ĵ|  | / /¯¯           \\           
                    \ \ ^\·éä\{¡||    /     //              /            
                   \æn\|* \¶*       / \\   ė¡ \ıæa      ;¿es ę           
               `\/| Ĩ³`  ` ä³`'\\Ĩ \ '|ı¦   |m¦\ |¡¿    ¡ıï\'            
         `´ \/||Ĩ³Ĩ\e×'¿ı  ':¡'| |    ā/      |ă'|·v`/¿â|á sæė           
        '^\''³Ĩ\ıėĕa)äėăìĕæā /ĵ       |         äæ\ |ĵ|\ì                
/   *¶/ aĝ\\ eā»ä|          ¾Ĩ         ¯¶*        |à"¶\ ¡                
à¡/ăĵ/v^ \\ /¡ ă|            Ĩº¯ /        ¡ ì          \   ¡                
|   à\ \  |ıèė¶āĵ            {ĵĵ| \seeėeaäĵ á|         "   ¡                 
\\ '\\\ '¡¿eā|   |             *°¶¡ `¡ä³¶¶¶¶\ )*         *'   s                 
^\\'\  «ä||                 ³¶\  í\¿;\¯^\   /\ \Ĩ       *\   ıä                 
\\¡'\ıäėė               \\»e«--á}*[^y"ä|||  /^\ Ĩ*    ³¯    á                  
sèāăĵā|                /^³¶"""\áà¡*ĵ\||\  :| |||  ¯¯¶°Ĩ     á                   
               '\;¡eaàää|\'íă ' )||  | || |    \:» ;ė                    
            \}äå*¶¶¯¯//-·«'s'\ /ı          ;¿ut³ĨĨ¶â                     
          /|\\\ \\    ` ¶*Ĩ/\  »¶åäeeeaaąĵ!\\\  `|ė                      
         \\  ^    ||   ·|||·â|æ  | \¶¶¯¯  |      ¿ ¶\                    
        * ^     ¿|     ¡'| |¶`¦ė              eâ| | \'                   
      \\       ¡|     á\|  |ì\ |ì           æĭ||  ·|`'                   
     /        à      ıïâ`   \ \ |s        eā|    \ ·' Ĩ¶(                
      )     æ|     ¿¡ú¶| |\|\ \* |¡     ¡ė    `\ ´      \\               
    |\\    * á ¿sā|äìà|«||á`   Ĩ  ì    æĵ   `"/}    ¡|' \\(              
   |\\    á|'|*ĨĨæĵ*â||:|`á\    \  à  è|   " \    ėä/|    \*             
   /'|    ì |' mā'å|`|`\*â \    "  âĵ*   \''\   uă    /| ·/¡             
    \        ||\|\(¦Ĩ·\\å '      " |||  ' ' \ æā\"  ^\ \  ×|             
   '      '   /\ '¦ ¡^³â '       \ |¦ä ¶`\  ¡â   (\ `'     "             
  '       \   \' á\{aāĵ \         \   "  \ æĵ  `¶ `         "            
  \        ¶\¡\\'     \\   |      '  ¶¡  ;ê " \\`           \"           
 \          ĵ\  '  \"''¡¡/       ìï·"\' ¡â |ï''               "          
'              æï\ ` ¡||\ ¿     | í'\| ıă  \/ |\           /¨^}\         
             ėë*î||| '| \äāåê¿á| ä || àĵ  '\|\         ıä'    \\`        
\          ;eā*â|`|  '¡|\ âı  ì \ ì  /à|\ '\| | \    ıà|         /        
\     ·/ `\ï |í`:  \'à|\  s |\|\ \³  || |'\| ·     eā¦|   `¡/` ··\\       
ĵú¿y^ ·|   '  ")³{âĵ| '   í  \ |   ¶ |\ ¶|  |\   ėă | ¡'·ă)*'  ·          
/ \ ì|      \' |ā|    \\  ¡\   \    \  '"s |/   ıė¦|   ·\\\¿eá'   ¡¡       
\ |    ¡¿¿eëè\   (\\\ âãğğ'   `¡»¡  ' /äa|    uĵ|    *¶ æā| ;¡   á        
/ \  ¡ëėĵ|   | ¶Ĩ   ¿èā    |/   () |ĵ\       ıä| ¿  \¯¿ėĵ    |¿¿ ì         
àėä|        ¡ ;ėā|        |//'|  '\'   |  æ|    \';áĵ       |¿á|         
á|           |ă|            ä*)|||  \   |¡ė     \ ¡|          |           
                           ||\`     \`¶\ĵ \  *\¡|                        
                           |·¦\·    " ¡á'`à " ä|                         
                            ïāĵ¡   | ìí|   ¶áâ                           
                               |¦   í\|  \Ĩu|                            
                               \      \  äà                              
                              ·ìseâ;  \                               \  
                              \ Ĩ¶^(¡//\\                                
                              |¡|  s¡|  \\                               
                                |ėă|\\·                                  
                                 \Ĩ\  '/                          \      
                                  |   \/ /                     \         
                                        /\|                              
¡|                                     \     \\¡                               
¡|                                      '³*ä¡  |à|                     ·|||||||  
''        ||                            |ėeė*/| \¡                    ||       |  
'       |                           \ /·/| */||                                
\      |                         |||'  \\ \|                                 
\      |                          | \\\   \³'| `\                        \  
\     |·                   /  ·s\         ¡ ¡»ï                        \   
\      ||                   \ 'ïsėáäĵ)¦|/\|(Ĩ                        '    
        |/                 |'|/\°¶\/|    ¿a|\    ||             |        
          |                      |||    ä|     |                `\       
           |                            |    ||                   ·|| || 
            |                          ||   /                    |  \\   
            |                         ||   |           \        |'       
 |                `                  \ ||  |                   /         
|||¡         ||||      |   '¦  \               /|                       \         
|·     |            | ·¿ |   \   ||       ||                    ¡             
||  ||              ||  |¡;  \  |       ||  ||              /|    |¡¡        
|  |                |/   \!|  ·|       |   \              ||        |       
\\    |                   /       ||               ·        · /           |      
\   |                    |      \              ||          |             |     
|  \                |       '           |                                 
    '                   /  |         /|                                  
/||   |||¡    '\\\        |||¡             /|                                   
\\\\\      ||¿                 |||         /|                             \      
'     |ì    \             |¡        |                                     
 \     |¡¡¡·               |     ¿¡                                      
  \      \\\\   /           |/ ¦|                                        
    \    |              \\\\ |/|                \    '    \\             
     '   ||            \                                                 
     \    |           \               \                                  
                     \                   \\      |  |                    
                                 \                                       
                                                                         
      ¿ \                                                                
     \                                                                   
                                                                         

              
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                        \'                                                 
                        \\\                                              
                          \\`                                            
                            \'                      \\\\\                
                  '          \                    \\     \\              
                  |           '                  '         '             
                 \            '                 \           '            
                 |            \                \\            \           
                  \     ėė¿ ù* \               \     ;ıı                 
                 \    sä  ä á ||                    uĵ  á    \           
                 /¡ėæıä ¶Õ||Ĩ\\¶¶\\ "*         \    à   |¡   |           
                 |'\ ĵ 'à|    \ ;å|\ă^\¯*      |   |       |||           
                  |ăÕ¶/sãã|   / à\*\'|ļ¿ Ĩ     /         ¡   ¡    \\\ *  
                   |¿ą |ĵ'|  |\|**  \{e¡/|à    í   \\    à: ì   \\| \\   
                    ä| \ ä\ |  '|¡  |¶³³  Ĩ\   |s;  \     äâ| *\/\ \ áä| 
                    " |   \|   \"à¡|    || \ "*¶¶¶¶ïn\    *°¯ \  ¿\¡á|   
                    |ĵ))Ĩ¶|  |/  ¶ăù; ;   \¡¡ăľ¯ ¦ï| ³¯  /   ıàāáá||     
                     \\\ | |  | ; ¶Ĩ|ĵ«au\s¯/*\| à  Ĩà   |eä|            
                     | ¡/     || ·| ¯³*Ĩ*'/à Ĩ||à| Ĩ¡   \'\              
                     's|      :¡| \        ¡\/â á \//   ·\\              
                    '|        ¡|¦·¡|  Ĵ*á ¡ \|'/ \\¡   ||¡|\             
                    ĵāa\     \'| \·í¡ '\"\¿ \|\| 'à|        '            
                      \|     ¡|/|||¡¡ ;øėä||  *| '|      '  '            
                     ¶\     ¡ì    '\  ĵ|  | / /¯¯           \\           
                    \ \ ^\·éä\{¡||    /     //              /            
                   \æn\|* \¶*       / \\   ė¡ \ıæa      ;¿es ę           
               `\/| Ĩ³`  ` ä³`'\\Ĩ \ '|ı¦   |u¦\ |¡¿    ¡ıï\'            
         `´ \/||Ĩ³Ĩ\e×'¿ı  ':¡'| |    ā/      |ă'|·v`/¿â|á sæė           
        '^\''³Ĩ\ıėêa)äėăìĕæā /ĵ       |         äæ\ |ĵ|\ì                
/   *¶/ aĝ\\ eā»ä|          ³Ĩ         ¯¶*        |à"¶\ ¡                
à¡/ăĵ/v^ \\ /¡ ă|            Ĩº¯ /        ¡ ì          \   ¡                
|   à\ \  |ıèė¶āĵ            {ĵĵ| \seeėeeäĵ á|         "   ¡                 
\\ '\\\ '¡¿eā|   |             *°¶¡ `¡ä³¶¶¶¶\ )*         *'   s                 
^\\'\  «ä||                 ³¶\  í\¿;\¯^\   /\ \Ĩ       *\   ıä                 
\\¡'\ıäėė               \\»e«--à}*[^y"ä|||  /^\ Ĩ*    ³¯    á                  
sèāăĵā|                /^³¶"""\áà¡*ĵ\||\  :| |||  ¯¯¶°Ĩ     á                   
               '\;¡eaàää|\'íă ' )||  | || |    \:» ;ė                    
            \}äå*¶¶¯¯//-·«'s'\ /ı          ;¿ut³ĨĨ¶â                     
          /|\\\ \\    ` ¶*Ĩ/\  »¶åäeeeaaąĵ!\\\  `|ė                      
         \\  ^    ||   ·|||·ä|æ  | \¶¶¯¯  |      ¿ ¶\                    
        * ^     ¿|     ¡'| |¶`¦ė              eâ| | \'                   
      \\       ¡|     á\|  |ì\ |ì           æĭ||  ·|`'                   
     /        à      ıïä`   \ \ |s        eā|    \ ·' Ĩ¶(                
      )     æ|     ¿¡ù¶| |\|\ \* |¡     ¡ė    `\ ´      \\               
    |\\    * à ¿sā|äìà|«||á`   Ĩ  ì    æĵ   `"/}    ¡|' \\(              
   |\\    á|'|*ĨĨæĵ*â||:|`á\    \  à  è|   " \    ėä/|    \*             
   /'|    ì |' mā'å|`|`\*â \    "  âĵ*   \''\   uĵ    /| ·/¡             
    \        ||\|\(¦Ĩ·\\å '      " |||  ' ' \ æā\"  ^\ \  ×|             
   '      '   /\ '¦ ¡^³â '       \ |¦ä ¶`\  ¡ê   (\ `'     "             
  '       \   \' á\{aāĵ \         \   "  \ æĵ  `¶ `         "            
  \        ¶\¡\\'     \\   |      '  ¶¡  ;è " \\`           \"           
 \          ĵ\  '  \"''¡¡/       ìï·"\' ¡â |ï''               "          
'              æï\ ` ¡||\ ¿     | í'\| ıă  \/ |\           /¨^}\         
             ėē*î||| '| \äāåê¿á| ä || àĵ  '\|\         ıä'    \\`        
\          ;eā*â|`|  '¡|\ âı  ì \ ì  /à|\ '\| | \    ıè|         /        
\     ·/ `\ï |í`:  \'à|\  s |\|\ \³  || |'\| ·     eā¦|   `¡/` ··\\       
ĵú¿y^ ·|   '  ")³{âĵ| '   í  \ |   ¶ |\ ¶|  |\   ėă | ¡'·ă)*'  ·          
/ \ ì|      \' |ā|    \\  ¡\   \    \  '"s |/   ıė¦|   ·\\\¿eá'   ¡¡       
\ |    ¡¿¿eëè\   (\\\ âãğğ'   `¡»¡  ' /äa|    uĵ|    *¶ æā| ;¡   á        
/ \  ¡ëėĵ|   | ¶Ĩ   ¿èā    |/   () |ĵ\       ıä| ¿  \¯¿ėĵ    |¿¿ ì         
àėä|        ¡ ;ėā|        |//'|  '\'   |  æ|    \';áĵ       |¿á|         
á|           |ă|            ä*)|||  \   |¡ė     \ ¡|          |           
                           ||\`     \`¶\ĵ \  *\¡|                        
                           |·¦\·    " ¡à'`à " ä|                         
                            ïāĵ¡   | ìí|   ¶áâ                           
                               |¦   í\|  \Ĩu|                            
                               \      \  äà                              
                              ·ìseâ;  \                               \  
                              \ Ĩ¶^(¡//\\                                
                              |¡|  s¡|  \\                               
                                |ėă|\\·                                  
                                 \Ĩ\  '/                          \      
                                  |   \/ /                     \         
                                        /\|                              
¡|                                     \     \\¡                               
¡|                                      '³*ä¡  |à|                     ·|||||||  
''        ||                            |ėeė*/| \¡                    ||       |  
'       |                           \ /·/| */||                                
\      |                         |||'  \\ \|                                 
\      |                          | \\\   \³'| `\                        \  
\     |·                   /  ·s\         ¡ ¡»ï                        \   
\      ||                   \ 'ïsėáäĵ)¦|/\|(Ĩ                        '    
        |/                 |'|/\°¶\/|    ¿ė|\    ||             |        
          |                      |||    ä|     |                `\       
           |                            |    ||                   ·|| || 
            |                          ||   /                    |  \\   
            |                         ||   |           \        |'       
 |                `                  \ ||  |                   /         
|||¡         ||||      |   '¦  \               /|                       \         
|·     |            | ·¿ |   \   ||       ||                    ¡             
||  ||              ||  |¡;  \  |       ||  ||              /|    |¡¡        
|  |                |/   \!|  ·|       |   \              ||        |       
\\    |                   /       ||               ·        · /           |      
\   |                    |      \              ||          |             |     
|  \                |       '           |                                 
    '                   /  |         /|                                  
/||   |||¡    '\\\        |||¡             /|                                   
\\\\\      ||¿                 |||         /|                             \      
'     |ì    \             |¡        |                                     
 \     |¡¡¡·               |     ¿¡                                      
  \      \\\\   /           |/ ¦|                                        
    \    |              \\\\ |/|                \    '    \\             
     '   ||            \                                                 
     \    |           \               \                                  
                     \                   \\      |  |                    
                                 \                                       
                                                                         
      ¿ \                                                                
     \                                                                   
                                                                         

              
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                                                                                  
                        \'                                                 
                        \\\                                              
                          \\`                                            
                            \'                      \\\\\                
                  '          \                    \\     \\              
                  |           '                  '         '             
                 \            '                 \           '            
                 |            \                \\            \           
                  \     ėė¿ ù* \               \     ;ıı                 
                 \    sä  ä á ||                    uĵ  á    \           
                 /¡ėæıä ¶Õ||Ĩ\\¶¶\\ "*         \    à   |¡   |           
                 |'\ ĵ 'à|    \ ;å|\ă^\¯*      |   |       |||           
                  |ăÕ¶/sãã|   / à\*\'|ļ¿ Ĩ     /         ¡   ¡    \\\ *  
                   |¿ą |ĵ'|  |\|**  \{e¡/|à    í   \\    à: ì   \\| \\   
                    ä| \ ä\ |  '|¡  |¶³³  Ĩ\   |s;  \     äâ| *\/\ \ áä| 
                    " |   \|   \"à¡|    || \ "*¶¶¶¶ïn\    *°¯ \  ¿\¡á|   
                    |ĵ))Ĩ¶|  |/  ¶ăù; ;   \¡¡ăľ¯ ¦ï| ³¯  /   ıàāáá||     
                     \\\ | |  | ; ¶Ĩ|ĵ«au\s¯/*\| à  Ĩà   |eä|            
                     | ¡/     || ·| ¯³*Ĩ*'/à Ĩ||à| Ĩ¡   \'\              
                     's|      :¡| \        ¡\/â á \//   ·\\              
                    '|        ¡|¦·¡|  Ĵ*á ¡ \|'/ \\¡   ||¡|\             
                    ĵāa\     \'| \·í¡ '\"\¿ \|\| 'à|        '            
                      \|     ¡|/|||¡¡ ;øėä||  *| '|      '  '            
                     ¶\     ¡ì    '\  ĵ|  | / /¯¯           \\           
                    \ \ ^\·éä\{¡||    /     //              /            
                   \æn\|* \¶*       / \\   ė¡ \ıæa      ;¿es ę           
               `\/| Ĩ³`  ` ä³`'\\Ĩ \ '|ı¦   |u¦\ |¡¿    ¡ıï\'            
         `´ \/||Ĩ³Ĩ\e×'¿ı  ':¡'| |    ā/      |ă'|·v`/¿â|á sæė           
        '^\''³Ĩ\ıėêa)äėăìĕæā /ĵ       |         äæ\ |ĵ|\ì                
/   *¶/ aĝ\\ eā»ä|          ³Ĩ         ¯¶*        |à"¶\ ¡                
à¡/ăĵ/v^ \\ /¡ ă|            Ĩº¯ /        ¡ ì          \   ¡                
|   à\ \  |ıèė¶āĵ            {ĵĵ| \seeėeeäĵ á|         "   ¡                 
\\ '\\\ '¡¿eā|   |             *°¶¡ `¡ä³¶¶¶¶\ )*         *'   s                 
^\\'\  «ä||                 ³¶\  í\¿;\¯^\   /\ \Ĩ       *\   ıä                 
\\¡'\ıäėė               \\»e«--à}*[^y"ä|||  /^\ Ĩ*    ³¯    á                  
sèāăĵā|                /^³¶"""\áà¡*ĵ\||\  :| |||  ¯¯¶°Ĩ     á                   
               '\;¡eaàää|\'íă ' )||  | || |    \:» ;ė                    
            \}äå*¶¶¯¯//-·«'s'\ /ı          ;¿ut³ĨĨ¶â                     
          /|\\\ \\    ` ¶*Ĩ/\  »¶åäeeeaaąĵ!\\\  `|ė                      
         \\  ^    ||   ·|||·ä|æ  | \¶¶¯¯  |      ¿ ¶\                    
        * ^     ¿|     ¡'| |¶`¦ė              eâ| | \'                   
      \\       ¡|     á\|  |ì\ |ì           æĭ||  ·|`'                   
     /        à      ıïä`   \ \ |s        eā|    \ ·' Ĩ¶(                
      )     æ|     ¿¡ù¶| |\|\ \* |¡     ¡ė    `\ ´      \\               
    |\\    * à ¿sā|äìà|«||á`   Ĩ  ì    æĵ   `"/}    ¡|' \\(              
   |\\    á|'|*ĨĨæĵ*â||:|`á\    \  à  è|   " \    ėä/|    \*             
   /'|    ì |' mā'å|`|`\*â \    "  âĵ*   \''\   uĵ    /| ·/¡             
    \        ||\|\(¦Ĩ·\\å '      " |||  ' ' \ æā\"  ^\ \  ×|             
   '      '   /\ '¦ ¡^³â '       \ |¦ä ¶`\  ¡ê   (\ `'     "             
  '       \   \' á\{aāĵ \         \   "  \ æĵ  `¶ `         "            
  \        ¶\¡\\'     \\   |      '  ¶¡  ;è " \\`           \"           
 \          ĵ\  '  \"''¡¡/       ìï·"\' ¡â |ï''               "          
'              æï\ ` ¡||\ ¿     | í'\| ıă  \/ |\           /¨^}\         
             ėē*î||| '| \äāåê¿á| ä || àĵ  '\|\         ıä'    \\`        
\          ;eā*â|`|  '¡|\ âı  ì \ ì  /à|\ '\| | \    ıè|         /        
\     ·/ `\ï |í`:  \'à|\  s |\|\ \³  || |'\| ·     eā¦|   `¡/` ··\\       
ĵú¿y^ ·|   '  ")³{âĵ| '   í  \ |   ¶ |\ ¶|  |\   ėă | ¡'·ă)*'  ·          
/ \ ì|      \' |ā|    \\  ¡\   \    \  '"s |/   ıė¦|   ·\\\¿eá'   ¡¡       
\ |    ¡¿¿eëè\   (\\\ âãğğ'   `¡»¡  ' /äa|    uĵ|    *¶ æā| ;¡   á        
/ \  ¡ëėĵ|   | ¶Ĩ   ¿èā    |/   () |ĵ\       ıä| ¿  \¯¿ėĵ    |¿¿ ì         
àėä|        ¡ ;ėā|        |//'|  '\'   |  æ|    \';áĵ       |¿á|         
á|           |ă|            ä*)|||  \   |¡ė     \ ¡|          |           
                           ||\`     \`¶\ĵ \  *\¡|                        
                           |·¦\·    " ¡à'`à " ä|                         
                            ïāĵ¡   | ìí|   ¶áâ                           
                               |¦   í\|  \Ĩu|                            
                               \      \  äà                              
                              ·ìseâ;  \                               \  
                              \ Ĩ¶^(¡//\\                                
                              |¡|  s¡|  \\                               
                                |ėă|\\·                                  
                                 \Ĩ\  '/                          \      
                                  |   \/ /                     \         
                                        /\|                              
¡|                                     \     \\¡                               
¡|                                      '³*ä¡  |à|                     ·|||||||  
''        ||                            |ėeė*/| \¡                    ||       |  
'       |                           \ /·/| */||                                
\      |                         |||'  \\ \|                                 
\      |                          | \\\   \³'| `\                        \  
\     |·                   /  ·s\         ¡ ¡»ï                        \   
\      ||                   \ 'ïsėáäĵ)¦|/\|(Ĩ                        '    
        |/                 |'|/\°¶\/|    ¿ė|\    ||             |        
          |                      |||    ä|     |                `\       
           |                            |    ||                   ·|| || 
            |                          ||   /                    |  \\   
            |                         ||   |           \        |'       
 |                `                  \ ||  |                   /         
|||¡         ||||      |   '¦  \               /|                       \         
|·     |            | ·¿ |   \   ||       ||                    ¡             
||  ||              ||  |¡;  \  |       ||  ||              /|    |¡¡        
|  |                |/   \!|  ·|       |   \              ||        |       
\\    |                   /       ||               ·        · /           |      
\   |                    |      \              ||          |             |     
|  \                |       '           |                                 
    '                   /  |         /|                                  
/||   |||¡    '\\\        |||¡             /|                                   
\\\\\      ||¿                 |||         /|                             \      
'     |ì    \             |¡        |                                     
 \     |¡¡¡·               |     ¿¡                                      
  \      \\\\   /           |/ ¦|                                        
    \    |              \\\\ |/|                \    '    \\             
     '   ||            \                                                 
     \    |           \               \                                  
                     \                   \\      |  |                    
                                 \                                       
                                                                         
      ¿ \                                                                
     \                                                                   
                                                                         

                

Movie ASCII Art Generator

The goal of this task was to convert a standard video into an ASCII-based video while preserving as much visual detail as possible. ASCII art video generation involves replacing pixel-based frames with character-based frames, creating a stylized representation of the original video. For this experiment, I used bleach_lr.mp4 as the input video and followed a structured pipeline to extract, convert, and reconstruct the video. The primary challenge was ensuring that the ASCII frames retained enough detail to make the video recognizable while keeping the playback smooth and synchronized with the original audio.

Original Video (blrach_lr.mp4)
Final Video (new width 240; Grey Level 10)

To begin, I extracted all frames from the original video. This process involved breaking the video down into individual image frames and storing them sequentially. Along with frame extraction, I also extracted the audio track separately so that it could be re-added after the ASCII conversion process. Additionally, I recorded the frames per second (FPS) of the original video, ensuring that the final ASCII video maintained the same playback speed as the source file. Maintaining the correct FPS was crucial for preventing lag or frame misalignment in the final output.

Once the frames were extracted, I converted each frame into an ASCII representation. Instead of using PCA-based ASCII conversion, I opted for grey level 10 (@%#*+=-:. ) since it provided better visual results. PCA had been tested in previous tasks, but it primarily captured edges rather than smooth transitions of brightness, making it less suitable for dynamic video frames. Grey level 10, on the other hand, retained both structure and shading, making the ASCII frames more recognizable and visually appealing. A smaller patch size was used to further improve the accuracy of the ASCII conversion. Smaller patches ensured that finer details were retained, preventing the loss of critical information in highly detailed frames.

During testing, I experimented with different output widths for the ASCII frames—80, 160, and 240 widths. The choice of width significantly impacted the clarity of the ASCII video. When using an 80-pixel width, the resulting frames were too compressed, making it difficult to distinguish important details. Increasing the width to 160 improved the visual output but still lacked the level of detail needed for a high-quality ASCII representation. Finally, with a 240 width, the ASCII video achieved the best balance between clarity and readability. The larger width allowed for more ASCII characters to represent the image, leading to a more defined and accurate output.

Test Video Clip (new width 80; Grey Level 10)
Test Video Clip (new width 160; Grey Level 10)
Test Video Clip (new width 80; Grey Level 70)
Test Video Clip (new width 160; Grey Level 70)
Test Video Clip (new width 80; PCA components 5)
Test Video Clip (new width 160; PCA components 5)

Once all frames were converted into ASCII images, they were compiled back into a video format. I ensured that the frame rate matched the original FPS so that the ASCII video played at the same speed as the original. The extracted audio was then re-added to synchronize the video with the original soundtrack, ensuring that the final ASCII video maintained both visual and auditory coherence.

Through this experiment, I found that the choice of ASCII conversion method, patch size, and output resolution played a crucial role in determining the quality of the final video. The grey level 10 method was superior to PCA for this purpose, as it preserved more details beyond just the edges. Additionally, using a smaller patch size enhanced the overall quality by capturing finer image details. The increase in output width to 240 significantly improved the readability of the ASCII frames, making the final video more visually engaging. This assignment demonstrated that optimizing ASCII video generation requires careful tuning of parameters to ensure a balance between clarity, detail retention, and playback smoothness.

goto top ^

Challenges Faced

One of the biggest challenges I faced was selecting the best method for generating ASCII representations. Initially, I tested PCA-based conversion, but it primarily captured edges rather than smooth brightness variations, making the output look like an outline rather than a detailed image. Grey-level mapping, specifically using grey level 10, produced much better results, so I decided to use it instead.

Another challenge was determining the optimal patch size. Larger patch sizes caused a loss of finer details, making the ASCII output less recognizable. On the other hand, using very small patches preserved more detail but significantly increased processing time. I had to find a balance where the patches were small enough to retain structure but not so small that the conversion process became too slow.

Selecting the proper ASCII frame width was another critical factor. I tested different widths—80, 160, and 240 pixels—and noticed that smaller widths made the details less distinguishable. The 240-pixel width provided the best clarity while keeping the output readable. Choosing the right font (Arial vs. Times New Roman) also led to minor differences in character mapping but did not drastically affect the overall quality, making it less significant compared to other parameters.

goto top ^

Attempting to Create Colored ASCII Video

To generate a colored ASCII video, I initially tried a method where each frame was split into its Red (R), Green (G), and Blue (B) channels. Each channel was then converted into a separate ASCII image, and finally, the three ASCII images were recombined to form a colored ASCII frame. However, this approach did not produce good results. The main issue was that ASCII characters primarily represent intensity variations, not color information. When splitting the frame into RGB channels, each channel lost crucial structural details since ASCII art is best suited for grayscale intensity mapping. Moreover, recombining separate ASCII representations for R, G, and B channels led to misalignment issues, making the final image appear noisy and fragmented instead of a coherent colored ASCII frame.

Original Video
Best Result: Color Output (new width 240; Grey Level 70)

To improve the output, I switched to a different method. Instead of splitting the frame into RGB channels, I calculated the average color of each patch and assigned that color to the corresponding ASCII character. This approach ensured that each ASCII character retained both its structural integrity and the color representation of the original frame. Since my original video had a black background, I maintained a black background in the ASCII video and reversed grey level 70 (" .'‘’^\",:;Il!i<>~+_-?][}{1)(|\\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$") for better contrast, ensuring that darker characters appeared lighter and vice versa.

However, this method also came with challenges. Since ASCII characters have different densities, a character like ' @ ' covers more space visually than a character like ' . '. Mapping colors onto ASCII characters while maintaining the correct perceived brightness was difficult. Some ASCII characters looked too bright or too dark compared to their surrounding patches, creating inconsistencies in the output. Additionally, handling color interpolation and smoothing the transitions between patches required extra processing, making the colored ASCII generation slower than grayscale ASCII conversion.

Despite these challenges, averaging the patch color and applying it to ASCII characters provided a much better result than the RGB channel-splitting approach, as it maintained both color and structural detail without excessive distortion. Reversing grey level 70 further enhanced visibility, making the ASCII video more recognizable and visually appealing.

goto top ^