###^^^^^^^^###^^########^^###^^^^##^^^^^^^^^###^^^########^^ ^###^^^^^^###^^###^^^^###^###^^^^^###^^^^^^###^^^###^^^^###^ ^^###^^^^###^^^###^^^^###^###^^^^^^###^^^^###^^^^###^^^^###^ ^^^###^^###^^^^###^^^^###^###^^^^^^^########^^^^^###^^^^###^ ^^^^######^^^^^###^^^^###^#########^^######^^^^^^###^^^^###^ ^^^^^####^^^^^^^########^^#########^^^####^^^^^^^^########^^