^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^########^^^^^^^^^^^^^^ ^^^^^^^^^#######^^#######^^^^^^^^^^^
^^^^^^####^^^^^^^^^^^^^^####^^^^^^^^ ^^^^###^^^^^^^^^^^^^^^^^^^^###^^^^^^ ^^^##^^^^####^^^^^^^^####^^^^##^^^^^ ^^##^^^^######^^^^^^######^^^^##^^^^^^
^##^^^^^######^^^^^^######^^^^^##^^^ ##^^^^^^######^^^^^^######^^^^^^##^^^
##^^^^^^^####^^^^^^^^####^^^^^^^##^^ ##^^^##^^^^^^^^^^^^^^^^^^^^##^^^##^^ ##^^^##^^^^^^^^^^^^^^^^^^^^##^^^##^
^^^##^^^^^##############^^^^^##^^^^^ ^^^^###^^^^^^########^^^^^^###^^^^^^ ^^^^^^####^^^^^^^^^^^^^^####^^^^^^^^*
##^^^###^^^^^^^^^^^^^^^^^^###^^^##^^^ ^##^^^####^^^^^^^^^^^^^^####^^^##^^^ ^^##^^^######^^^^^^^^######^^^##^^^^