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