
Choosing a Software Idea
==========================================================================--=-----=============================================================================================++=======------------------------------=-==============================+============---------------------------===============+++++++=========+=+===========+++=++++++++++++++++++++++=++================+++===========+===++++++
============================================-=====-----===-===============-=------=====================================================================================+==+==+==++=====----:::::::--:-:--------------=====------===============================---::::::::------------------==-===========+++++==========================+==+++++++++++++++++++++++=========================+==========++=++=+++
===================--=======================--=====-==------==============--=-----===========================================================================+===++++++=++++++=========--::::::::::::-------------------------==-==-====+======+=============--::::::::::::::----------------------========================================+++++++++++++++==+==++========================================+====++
==========================================---==-=======------======---==---------================================================================================+++++=+==+=============---:::::::::--------:---------------------=========================--::-::::::::::---------------------=--=========================================++++=+++++++++=++==+===++=======================================+===+
===========================--=-==-=======-=====--=====++==---=----=--=--=-------=======================================================================================+=============------::::::::::-::----------------------=--=========================--:--::::-:-:::::-:::---------------=====-=========================================++++++++++==++==++++++++=+=======================================++
--====-======================--=---===---=====-======+++++++========--==-=-------=---===============================================================================================--------:::::::::::-::--------------=----------====================--------::::--:-::-:::--------------=----------=====================================++=+++++=+++++++====++============================+==================
---==-==-=====-==-=-------=------=-------=--====-==++++++****++=++**+===--==-------------------=-====-==========================================---==-============================----:::::-::-:-:::::::----------------------------==================--:-::------:----:--------------------=----------===================================+++++++++++=+=++++====================================================
-------==-===----=-----=-------------------=======++++++*************+=======---------------------===-=========================-===========-------===-===========================----::-::-::---::-:-:--:--:::----:---------------------=---========----:::::--------------------------=-------==-=---=-=================================+++==+++++=++++++=====================================================+
------=---------------===--------==-----========+++++=+**********#****=====-----------------------===----==========-----===---==========----=--===-==----========================----:------:-:::--:---------::------------:--------------------------:::::--::------------------------=-------==========================================================+======================================================
--------------------------------=-----======+++++++++++**#*#*#*#******+=====---------------------=--==-=======----------===-=========-----------------------=============---====--------------------------------------------------------------------------:----------------------=------------==========================================================++=++===================================================
------------------------------------=====+++++++++++++*********#*******====--------------------===-===========---------=====--==-==------------------------------======----------------------=---------------:::--:::-------------:--------::::---::--------:-----------------===--==-=-------==========================================================++=+=====================-==============================
-----------------------------------==-++++++++++++++++**********#***#***+=-=-------------------=-----==-==-=---==----==-----------------------------------------=========-----------------------------------:----::--------------------:--:---------------------------------=-==--====--=--================================================================================-==-=================================
---------------------------------===+++++++++***+++++++*#******************=--------------------------====---------=----::::::::-::::::::----------:----------=-=-=-==-==-----------------------------------------------------------:-:----------------------------------------===========================-===============================================================---===-===============================
---------------------------------==+++++++++++*++++++****#*******#**********===----------------------=-==-------------::::::::::::::::::::-::---------------=======--------------------------------------------:---------------------------------------------------------------------===================-================================================================--=--=---=============================+
---------------------------------+++++++++++++**+++++****#*******##**********+==-=-----------=---------=-------------::::::::::::::::::::::-:::-------------=--=-=--=--------=----------------------------:----------------------------------------------------------------------=========================================================================================-==-====-===================-=========
-------------------------------+++++++++++++*++++++++*************#**#********===--------------=--------=-----------:::::::::::::::::::::::::::::----------=---------------------------------------------:::----------------------------------------------------------------==-===========================-==================-=-----=======================================-====================================
-----------------------------==+++++++++++++++++++++****************#**********===-----------------------::-----------::::::::::::::::::::::::::------------------------------------------------------::::--::---------------------------------------------------------------=-============--===-==========================-----=--------=======================================================================
----------------==---==----=+++++++++++++++++++++++***#*************************===---------------------:::::--:----::::::::::::::::::::::::::::------------------------------------------------------:::-:-----------------------------------------------------------------=--=========-=----=---====-=--=============--------------======-====-===============================================================
--------------=+++++*++++=+++++++++++++++++++++++++************************+****+=---------------------::::::::::::::::::::::::::::::::::::-::::::----------::--:-::::-:-------------------------------------------------------------------------------------------------=========-=-=========-====-----=-=-==========-----------===============================================================================
----------=++++++++*****+*+++++++++++++++++++++++++*****#***********************#=--------------------:::::::::::::::::::::::::::::::::::::-:::--::----------:::::::::::::::::----------------------------------:::-------------------------==--------------------------=-==-========-=====--==----==--------====---------==-----================================-==============================================
------==+=+++++++++*#******++*+++=++*++++++++++++++*****##***********************+-------::::---:-:-::::::::::::::::::::::::::::::::::::::::::-:::::-:------::-:::::::::::::::::-----------------------------::-:::------------------------===-----------------------------=-========--------=====----=-----------=--=-----=----========================-======-======-==--=====================================
==---=++++++++++++*####***++**++++++**++++++++++++++*****###******#*******#*###***=---------:::::---:--::::::::::::::::::::::::::::::::::::::::::::---:-:----:::::::::::::::::::::::-::---------------------------------------------------------=-----------------------------===-----------------------------=-=----------==========================-===========------==-==-===================================
++++++++++++++++++*####*******++++++*++++++++++++++*******##*****##***#*****#*****+--::------:-::::::----:::::::::::::::::::::::::::::::::::::::::::-:--------:-:::::::--::----::---:---------------------------------------------------------===-==----=--------------------=----------------------=------=-=-=----=--=---=====--=================---==----===-------==--=-===============-====================
+++++++++++++++++**#####**++**++++++++++======++++++*****####***#*#**********##**#*+***==---=+-:::::::::::::::::::::::::::-::-::::::::::::::::::-:-:---------:::::::::::::-::----:-:------:-::--:-::------------------------------------------===-==----------------------------------------------==========--=======--=======-===---===============-------------===============================================
++++++++++++++++++*#####**+++****++++++=+++==+++++++++******##********#*****#****#**#**********+--::::::::::-::-:-:-:--::-:-::-:::::::::::::::::::::::::::::::::-:-::-::::--:--:::-:--::--:::---::::-:--------------------------------==---=---------=----------------=--------------------------===========================-=-=-=--=======================-====================================================
++++++++++++++++++*#####**++++***+++++++++++++++*****+*******####*#**#********###*######***#**#**-------::::---:::::-------:::::::::::::::::::::::::::::::-::-:-------::::--:-------:--::-:::--:--------------------------------------==-------------------------===-===--------------------------==============================================================================================================
+++++++++++++**+***####***++++***+++++++++++++++**************##******#****############***********=---:::::::-:::::---:-----::::-----:---:-::::-::::::::-----:-:----:-:-::----:---------------------------=------------------------------------------------=++---=--=--===---=-------------------====-========================-======================================================================-==========
++++++++++++****#####*****+++++*+++++++++++++++++**********##**##****###***####**#########******##*+---------:::--------------------------------:----::-:::-------------------------------------------------------------------------------------------=#+===*%#+===-==--------=-----------------=============================-===================================================--====================--=======
++++++++++++****####******+++++****++++++++++++++*****#***###**##*****##**********########***##**##**------::-::------------------------------------------:::----------------------------------------------------------------------------------------=+#%+==+#%%#=======-----==-----------=-----=--========================================================================-===-----====================--======
++++++++++++**#####*#****+++++***++++++++++++*+*+*****########*###****#*******##**#######*******#####=------------------------------------------------------------------------------------------------------------------------------------------------+*#%*+*%#%@%===============-------------==-==========================================================-----=-=-==-=-------------==--=-============-========
+++++++++++****####******++++****++++++++*++*###*****#*############********#*******######*****#*#####*=---:-----------------------------:-----------------------------------------------------------------------------------------------------------==-*##%%%%##@@@@%%%##*##+++=-==-----------==-====--==========================================---=---=-------====--==------==-=-=-====--========-============
+++++++++++****###*******+++***+++++++++*++**######*#*######*#########****###*****#**####*****####*##**---------------------------------:-----------------------------------------------------------------------------------------------------------===+#%%%%%*%%%@@%%%%%%%%%%%#*+========---==--==================================---=============-=---------=============--=----=---=-----=======--===========
++++++++++*****####******+++**++++++++++*+***##########################*##*###****#######******####*###+---------::-------------------:-:::-:----:----------------------------------------::-------------------------------------------=--=----------=+%%%%%%%%#%%@@@@%%%%@@@@@@%%%*###+-====--========================================---====------------------=--=-==---------------------========-=====-=====
+++++++++******###*******++**++++++++++++*****#######################**########****##*###*****##*####***=-------------------------::--::-::--:-:----------------------------------------------------------------------------------------------------=#%%%%##%%%%%@@@@@@@%%%%%@@@@@@@%###*#*+================================-===============---=------------------------------------------------=-==--=-=--=====
#*+++++*********##*****+++**+++++++++*+++**##########################**##**####****#*#####**#**#####****+--:--------------------------------------:---------------=-----------------------------------------------------:------------------------+#%%######%%%@@@@@@@@@@@@%%%@%%@@@@@@@@@#%#*++===========================================---------------------------=-=----------------------------=---========
###*+++*******#*###***++++++++*+*+**+++*+**#############################***######**##########**########*++--------::-:--------------------------------------------------------------------------------------------------------------------------+#%%########%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@%#*+*++=======================-=============-==-------------------------------=-----------------------------------====
####*******+**#####**+++++++++**+++++**+++*###########*#**##############*#*###################*#########***==----::-:::::-----:-------:----------------------------------=----------------------------------------------------------------------=*%**##%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#**++=+====================-====---=--======---------------::::::------------------:-:-:----------------==---=-=====
######*#*++++**###**++++++++++*++++++*++++**######################################****########*##*########**=----------:-------==---::-----------------------------------------------------------------------------------------------------------***##%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##*+=+=======================---------------:----------::::::::::-----------------------------------====---==-====
#######**++++***###+++++++++++**++*++++++++*########################################*###########*****######***+*=---------==+++++++--::---------------------------------------------------------------------------------------------------------=#*###%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+*=============---=-=-----------------:------::-:::::::::::::------:-----::--:-------------=--=======--=======
#######**++++*****+++++++++++++**+*+++*++++*##################################*####*#*########***#****#####****+*+----=====+++==+++++=------------------------------------------------------::-------------------------------------------------+**#####%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*+*+=========-=-------------------------------::::::::::::::::-::------:-:--:------------=--======-==========
########**+++*****+++++*+++++**+++++*+++++*########################################***#*##******#*#****#*###******+=++=====+++=++*++++*+=---------------------------:--:-------------------::::-:--------------------------------------------=+#**####%%#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%##*====----=-------------------------------:::::::::::::::::::::--:-------:---------=-=--=--=--=--=========
#########****++*+++++++++****+++++++++++++*###################################*####****######***###*#**#######*****+=+==++++++++***+****+=--------------------------:-::--:::::----------:-:::::::-:-------------::------------------------=+****#%%%%%#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#%*+====----------------------------------:::::::::::::::::------------------------------------=----======
#########****++++++++++*****+++**####*+++**#*###############################*#**####*######*#*#*##*###*######*##***+=+=+===++==+******+***+-----:--------:-:-::::::::::::--::-:-----:--:-::::::::::-:-::::---------------:----------------=***##%##%##%#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#***#===----------------------:---------:--::::::::::::::--------------------------=-----====-------=====
###%######**++++++==+++*****++++*####**+*****############***##################**###########**##############*###*#****+++===+==+***+********+=-------:---:::-:::::-:::-:::::::::::-----::::::::::::::::::::::-----------------------------****###%%#%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*=====----------------------------------::::::::::--:----------------------------=-==========-----=====
##########*+++++++++++****++++***###%#****+**##########*****#################****###########*#*#############*####****+++++++==*++***********++---::::::::::::::-::--::::::---:::-::::::::::::::::-:::::::::-----------------------------#**#%#####%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%*====------------------:----::----:-----:-::-:::::-----------------------------=============-----=====
######%###*++++++++++++++++++++**##%##**+*****##########****################****##############**#############*####****+++++++++**********+**+++--::::::::::::--::::::::--::::::::::::::::::::::::::::::------------------------------==***#####%%#**#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*+====--------------:::-::::::::-::-:----------------------------------------=====-======--------=====
###########*++++++++++++++++++++####%#*********#########*##################****################**#################****++++++++++**********+**+++--:::::::::::---::---::-:---:-::::::::::::::-::::::-:---------------------------------*+**#%##%%%##%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*+===---------:::-----:::::-:::::-----:-----------------------------------======---=--===----=-======
##%##########*+*+++++*+++++++++**#####*****+***######################*#######**##################**################**#++=+++++++***********+***+=---:::::::::-------:--:-------:::::::::::::::-:::::--------------------------------=+*####%#%%%#%%@@@@@@@@@@@@%%#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%*+===-----------------::::::::---------:----------------------------------====-----------------====
##%%%##########**++***++++++++++*#####**++*+**##*######################*#*####****###############**#################*#*+++++++++*++++**********++--:-::::::::::-----------------:-::-:-----:::::::-::-------------------------------=*#%%@%#%%%%@@@@@@@@@%*+--===+*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@%%%*+===-----------:--::-::::::::::::::----------------------------------=--===-=---------------====
#%%######%##%##*****+++++++*******#####***++***#**#####################***##########*###################**#############+++++++++*+++************+==----::::------------------------------::::::::::::------------------------------==*@@@@%%%%%@@@@@@%%#+==----===*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%#**+=---------------------------------------------------------------=--===-=----------==------===
##%%####%%##########*+************######**********#####*################**#*########**######*############**##############*+++++++*****************+=------------==-=------------------------------::--:-----------------------------=*#@@@%%%%@@@@%++++===-----===*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%#%%%%#*====---------------------------------------------------------------------------==-=----=--===
####%#%%#%##%%#########***********#####**#********####*##*##**###########*##*######*#########**#########*##################**++********+******+***+==-------====++=+===-------------------------------------------------------------=*%@%%@@@@@%%*+=====-------===#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%#%%#*+==-----------------------------------------------------------------------------------------==
##%#%%%#%##%%%##########***********#*****#********####***###***##############################***####*##*##################*##*******++*+************+=--===+++=+++++++++++==----------------------------------------------------------*##%%%@@@%*=---------------+%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%###**++==----------------------------------------------------------------------------------------===
#%%%%#######%%%##########**********#*************#*##***++*##**##############################*#*#####*#**#####*###**###########*****++++++***********++++++++++++++++*++++*++=------------------------------------------------------------=+**+==---------------+%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%##***=====-----------------------------------------------:---------:------------------------------==
################%%%#######************************#**+******#########################*########*######**##########*#*###########**#*+**+++******+*******+++++++++++++++*++++++===--------:---------------------------------:-------------------------------------#%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#**+++==+==-------------------------------------------::-:-------------::--------------------======
##%##############%#%#######**********++**+***+****#****+**+***################################*##########*########################***********************++++++++++++**+++++++++=--------------------------------:-:-------------------------------------------*#%%%@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@%#*#+======--------------------------------------------------------::::-:-------------------========
#%%##%%##########%%##%%%%#####**+**+*++++**+**++****+++***+******#####################*#*############***############################************+**********+++++++++++++*+++*+++++---------------------------::-::--------------------------------------------=##%%%@@@@@@@%%%@%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@%%****+++===------------------------------------------------:::::-:------------------------========
#%%###############%%%%%%#%%%%%#*++*+++++++****++**++*+++*********####################********##########*#############################********++**++**********++++++++++++++++*+++++---:-----------------------------------------------------------------------*#%%%%@@@@@%%%%%%%@@@@@@@@%%@@@@@@@@@@@@@@@@@@%%%%%#***++====----------------------------------------------:-------------=---=---------===========
####################%%%#%%%%%%%%******+++++***+**++****++********######################********#*#######***############################***++++++*******+*******+++++++++++++++++++++=---:---:::::--------------------------------:--------------:------------=%#%%%@@@@%%%%%%%%@@@@@@@@%%@@@@@@@@@@@@@@@@@@%*#%%####+==----=--------------------------------------------------------=------=-================+=+
##########%###%%%%%#%%%%%%%%%%%%%#**+++++++********+******+******######################****##***#######**##############################****++++++****************+++++++++++++++++++++==-----:::--:::::-------------:-::---:-------::::::::::----------------=#%%%@@@@%%%%#%#%%%@@@@@@%@@@@@@@@@@@@@@@@@@@%%%#*#%##+*++==-----------------------------------------------------------=========+++++++=+++++++++++
%%%#########%%%%%%%%%%%%%%%%%%%%%%%#**+*++++++******+*********####*######################*######**######################################*+++++*+*+++*****++******+++++++++++++**+++++++-----:::-:---::--::------------:-::::-:--------:::-::::---------------+%%%%%@%%%%###%#%%@@@@%%%%%%%%@@@@@@@@@@@@@@@@%##+*+**++=---=----------------------------------------------------========++++++++++++++++++++++++++
#%%%%%#%####%%%%%%%%%%%%%%%%%%%%%%%%###***+***+*******#********##########################*#########*######*#*############################***+++++*+++******************+*++++*++*****++++-----:--------:------:---------------------------------------------+%%%%%%%########%%@%@@%####%%@@@@@@@@@@@@@@@@@@%##++++*++==-==------------------------------------------------=======+++++++++++++++++++++++++++++*+
##%%%%%%%%%#%%%%%%%%%%%%%#%%%%%%%%%%%%##**#****++*****####*******##################**#**##*################**###############################***+****+*+********************************+*+==------------:---:---::------=--=-------------------------------=*#%%%%%#######%%%%%%%%%####%%%@@@@@@@@@@@@@@@@@@@###+==+===----------------------------------------====+=======-==++++++++++++++++++++++++++++++++++
###%#%%%%#%##%%%%%%%%%%%%%%%%%%%%%%%%%%##*****#***+****#*#********#####################**#*##*##############*###################*#*##########******++++*****++*+***************************=+=---------========================----------------------------+#%%%%%#####*#%%%%%%#%###%%@@%%%%%%@@@@@@@@@@@@%%%%%**+==+===--------------------------------======++++++++++++++++++++++++++++++++++++++++++++*+++++
##############%%%%%%%%%%%%%%%%%%%%%%%%%%%###***#***++***************#####################*******###*#####%#########################*###########****++++++*+*++++***************************+*+==---=================================-------------------=-=*#%%%%%#%######%%####%#%#%%%%%#%%@@@@@@@@@@@@@@@@%@%#*++==++======----------------------=---=++++++++++++++++++++++++==+++++++++++++++++++++++++*****+
#########%###%#%%%%%%%%%%%%%%%%%%%%%%%%%%%####**#*********#*********#**########*##########*****################################*##*#############***++*++++++****************************+*++*+++++===============================+====------------------**##%%%%#%##################%%%%@%@%@@@@@@@@@@@@@@@@@%%*=+=====--------------------===+======++++++++++++++++++++++++=+++=++++++++++++++++++++++**+*+*++
#################%%%%%%%%%%%%%%%%%%%%%%%%%%######*******+************#######################*****###########################%######*#############***+++++********************************++++*++++++=+==========================+++++======-=---------=**##%#%####*###*####%###%#*###%@%%@%@@@@@@@@@@@@@@@@@@@%+*+========-----------====+++++++++++++++++++++==++++++++=+++++==++++++++++++++++++++++**+*+***++
#####################%%%%%%%%%%#%%%%%%%%%%%%###%%#********+*****++****############*#############**###########################%#####################***++++***************+*************++*++++++++**++=+===============+==++=====+++++++=============+*####*#####**#****#####%##%#%%@@@@@@@@@@@@@@@@@@@@@@@@@@@%#*===========-====++++++++++++++++++++++++++==++++++++=+===++++=+++++++++++++++++++++********+++
########################%%%%%%%%%%%%%%%%%%#%%###%%###********+*******#***#####################################################%######################****+*******************************+*++*++***+**++++=======++===+===++++++==++++++++===+++++=+++*#########*#****###%#####%#%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@**++=++++=+++++++++++++++++++++++++++++++++++++++++++======+++++++++++++++++++++++****+***++*+
##########################%%%%%%%%%%%%##%%%%%###%#%######*******+++*++*******#######################*#######*##################%######################********+***************************+++*+++****+****++======+++++++====++++++++++++++++=+++++++*####***###***###*#####%#%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#*++++++++++++++++++=======++++++++++++++++++++++==========+++++++++++=++++++++++*+****+++**
#########%%%###%#######%###%###%%##%%%##%#%#%%%###############***#*******+******####################***################################################*****+*********************************+++++++********+++===++==========+++++++++++++++++++++*####*#####**#*#**######%%@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@%*++++++++++++++====+++++++++++++++++++++++++++++++==+++++++++++++++++++++++++****+**+***
############%######%%########%##############%%%%%%############************++****#####################******##############################################******++***************+++++**********++**++++*********+++++++++++==++++++++++++++++++++++*#######*#####*########%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@%#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++****++++*******
###########%#%%%%%%%%%%##%##############%###########%##############*************##########*###############**###############################################*****++++++***++*****+**++++***+*+**+++**+++++**********+++++*+++++++++++++++++++++++++++#################%#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#***++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*+++*+***+++++****+
##########%#####%%%%%%%%%%%%##%#%%%#%#%%%###########%%################*###**********########***##############**###**#########################################*****++++++++++++*******+++++++++++++++++++++*********************+++++++++++++++++++++%###*#%#####*##%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@%%%%%%%#####*+++++++++++++++++++++++++++++++++++++++++++++++++++**++++++++++**+**
####*##########%###%#%%%%%%#%%%###################%#%%#####%##%##############**********#######***#############********#############################################***++*++++++++++****+++++++++++++++++++++++********++**+*****++++++++++++++++++++#%##*%%%%######%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%##%%##*++++++++++++++++++++++++++++++++++++++++++++++++++++++++***+***
##############%%####%#####%#%%##%%#%#########################%%#################*#**#*****########################*******############################################******+*+++++++++***+++++++++++++++++++**++*++**+++**********#*+++***++++++++++#%%###%%#%####%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%@%%%%%%%#*+++++++++++++++++++++++++++++++++++++++++++++*++++*+**++***
############################%%%##%########################%####%###############**#*#*********#######***#############********##########################################********++++++++++*++++*****++++++***++*++++++*****+*++**#%%%%######***+++++++#%%%#%%%%%#%%%%%@%%@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%@@@@@%%%%%#*++++++++++++++**++++**+++*++++++++++*+*+++++++**++*+****
#####%#############################################%########%%%%##%##################***********#*************########*****#*############################################**********+++++++++++++*+***********++*+++++++++****##%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@%%%%@%@@@@@@@@%%%*++++++++****+*++++++++++++++++++++++**********+*******
#####################################################%#########%%%#%%#####%#############*****++*****************#########**###########################################**#####**********++++++*+++++***+********+**+++*++*+**%%%%%%%@@%%@%%%@%%%%%%%%%%%%%%%%%####%%@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@%%###%@@@@@@@@@@%%#*+++++**+**++++++++++*+++++**++++********************
########################################*#######################%%%%%%###%########%###########*********************###########*##***##########################################************++++++++++********+**+*++**+*++**##%%%%@@@@@@@@@@@@@@@@@@%%%%%%%%%%%##%%%@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%@@@@@@@@@@@@#*++****+**++++++++*+**+********++******************
######%###################################%##############%#%###################################**************************##################*#####################################*************+++++++++***++******++***++**%%%%@@@@@@@@@@@@@@@@@@@@@%@%@@%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@%%%%@@@@@@@@@@@@@%***+++++++++++************************************
*######%%############################%################################%%##%#########################*************************#*#**####*########################################*#####*##******+***++++++++++++++******++++#%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%@%%%%%####%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@%**+***+*****************************************
**###****####################***#########################################################################***********#*###*#####***##**###*#****#**##########*##################******###*******************+++*+*+********%#%%@@%#***#%%@@@@@@@@@@@@@@@@@@@%@%%@######%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*****+++***************************************
#**************###############***###########################################################################************************#####**********#*##**#######***#######**####*#*#******##**********************+++*****#%@@@@#**********%@@@@@@@@@@@@@@@@@@@#######%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@%%#*******************************************#
*####********##*#*##*#*##############****##*##################################################################*********+******************###***********##****************######****#************************************##%@@@%*************##%%%%%@@@@@@@@@%%###%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%#*****#**************************#*#**
***#####*#******###*******#############**********###################################################################******************++++++**#*#*##*************************#####********###****************************##@@@%#********************#%#%%%@%####%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%##*#**************************####
****+****#***********#*******############*****************#################################################################**#**************+*+*************************************************************************##@@@@#*************************#%####%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%####****************#**#*****###*
****+++**********************#*****#*##********************+***###################################################################****************++++***++*++*********************************************************###@@@#*************************%####%%%%@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#*********#*###*********#####*
*******++*****++****++**********************************##******##############################################*##########################**************++***********+***++*******+++**********************************#*#%@@@************************%###%@@%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#********###*#*******########
****#******************+***************++++********#***************##**############**##*#####*####*#****############################################*******#*********************++++++++*****+++++***++***************#%%@@@*********************##%%%@@@@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%####*#######**##############
************++****************+******++++++++++**************************++***####********##############**#****###**########################################*****************++++++++++++++++++++++++*+*+++++++*****+###%%@@@%***+*+*++*******#%%%%%%%@@@@@@@@@@@@@@@%%%##*****#%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@%@%#########**###############
#*##*****######*#****************+++****+*********++**++++++++***************+***********###############*#*********########################################*#*#*****#****#***********++++++++++*++++++++++*+++*******%#%%%@@%#+++++++++***+**#%%##%@@@@@@@@@@@@@@@%#*************#%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#%@@@@@@@@@@@@@@@%##########################
*#*####*****####*#*#####*********##**++++**+**************************++++*+*******+++************#*#########***#************####*############*##***#####****###***************#****************++++++++**+++*+******#%@%%@@@#**************%%#%%%%@@@@@@@@@@%%%#*****************####%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@%#########################
#####*#######***##**#****###***************#############*************************************************#*##########****#***#####******#*******####*****************#*************************************+*+********#%%@@@@#*************#%#%%%%%@@@@@@@%#************************##*###%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@%%###################*###*
***######****************************#****##################*****+***********************************************########******##***************####***********************##******************************************%%@@@%%%%%#*********#%#%%%%@@@@%#*#********************#**********######%%%%@@@%@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@%#%@@@@@@@@@@@@@@@@%%%%###############*******
###*#*####***********++***************###########%%#%%%###%#####*************************************************++**************#*#**************#*###*#**#*****##**********+++++*****************************+*******#%%%%%%%%%%#*********%%%%@@@%%####*****************++******************#***##%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##%@@@@@@@@@@@@@@@@@%%%####*#*#######*####*##
##*#######*#######********++*****################%###%%%%%%##%##*************************************************************++**********************************************++++++****************+++++++**+**+********#%%%%@@@%%%*********%@@@@@@@%#**+**********+++++*********************************###%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%##%@@@@@@@@@@@@@@@@@%#%###*#*######**##*##***
*###****########%%%#********#######################%%#%%%%%%%###********************************+********************+****+********++******+++++************************************************+++++++++********+*******@%%%@%%%%%*********#%@@%%@@%******++++++++++++++************+++*++*****+*********#**##%@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@%###%%%@@@@@@@@@@@@@@@%%#%###*########**######*
############%%##%%####**##*****##################%%%##%%%%%####*****+***++++***+*+++++++****++++++++++++++*+++++++++++************++**+++++***+++++++*+++++*******++******************++**++*+++**************************%%%@%%@%%**********%@@@@@@%********************************************###*#*##******#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#*##%%@@@@@@@@@@@@@@@@@%%#%##**#######**#######
#####%%######%%%%%%%###%######*###########%#######%###%%%%%%###*****#****#***+*++++*++*+*****++*+++++**+*******++**********+++++***++**++******++++****++***+********+++++++++*********+**+******#**************************%%@%@%%***+***+***@@@@@@@*****++*******************************++**************##**#%@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@%##**#%%@@@@@@@@@@@@@@@@@@%%###**********#*###***
####%%%%%%#%%%%%%%%%%##################*##%########%%%%#%%%%%#####*##%##*****************************************##*#####**************************************+*********#**********+*****************************************#%%%#******+****#@@@@@@#*********+**************************#**********#*#*#******#%@@@@@@@@@@@@@@@@@@@@@@%%@@%%@@@@@@@@@@@@@@@%########%%@@@@@@@@@@@@@@@@@%%%%##**###*##########*
###%%%%%%%#%%%%%%%%%##%%############%######%#%%#####%%%%%%%%%%################*#*************#**********##*#***########****######***#***###*###******#**##*#*#*******#***#*****###*********#**#########*************************##*****#***++**%%@@@@%************************####***###*###***#*##*#***###*##*##%%@@@@@@@@@@@@@@@@@@@@@@%@@%@@@@@@@@@@@@@@@%#########%%@@@@@@@@@@@%%@@@@@@%#############****##*
##%#%%%%%%%%%%%%%%%%%%%%#############%%########%%%%%#%#%%%%%%%####**#############************#*#######**###############***#########*#*****#*#***#*#############*#***#####*#*##*##*#***#########**########****#***####*****#************##****+*#@%@@@@#****######********###*#*#*##############**###############*#%%@@@@@@@@@@@@@@@@@%%##@@%@@@@@@@@@@@@@@@%#####*####%%@@@@@@@@@@@@@%@@@%@@%%%##***************
##%%%%%%%%%%%%%%%%%%%########################%%#%%%%%%%#%%%%%###########%########*****#*##############*##*######*#############*#*#####*****##########*###*#*###########*#*######*******#########***#######******#*#########***#****##**####*****#%%@@@%****######**###****#######################*##*#############%%%@@@@@@@@@@@@@@%%#*##%@@@@@@@@@@@@@@@@%#*#########%%%@@@@@@@@@@@%@@@@@%%@%###***************
##%#%%%%%%%%%%%%%%%%####*###########%#%%%#%###%#%%%#%%%%%%###############%##%%##*#*#******######%%#######**************************+++***+++++******#*####*####***************+++++***************************##***########***#**###****#**#***##@%@%@%%******####*####***###*###*#****#######*********###***#*####%%%@@@@@@@@@@@@%#######%@%@@@@@@@@@@@@%##########*#%%%@@@@@@@@@@@%@%@@%%%%%%%###******+******
##%##%%#%%%#%%%%%%%%########%########%#%#####%%%%%##%#%%%%%%##########%%%%##%%%#####**####################*******+++***++++*****+**+**************#####*######****++++*++*++++++++**+*+********************+++******#*#*****#*********#****#****#%@%@@%@@%*********#**************##***#***#######*#**##*********###%@@@@@@@@@@@@@%####**#*#%%@@@@@@@@@@@%###********#%%%%%@@@@@@@@@@@@@@%%##**##**#***+*++*****
###%%%%%##%%%###%%%###########%########%%#%%##%%%%##########################%#####******###*#################*****#******+++************######*################*****++++++++++++*+***++++++*++++++*****+****++++*********************************#%%%@@@@@#**************+*****************************************##%@@%@@@@@@@@%##*#*****##%%@@@%@@@@%@@%**********#*%%%%%@%@@@@@@@@@@@@@%%#***#**************
####%%%%%%##########%%%#######%##################################################*#*######################################*+*********###****#******#########****#*********+++***++*********+++++++++++++++++**+++***+++++*+**++**++**+*+++**+*****@%@@@@@@%#*+****+***+*+++*++*+***********************+*++**********#%@@%@@@@@@@@@##**+****##%%@@@@@@@@@@%************#%%%##@%@@@@@@@@@%@@%#%###****#**#*******
#############****#####*###############%%########*****#*#**##***###***#######****##****#*##*#######**##*####%%%############*******+*+*+*******************************+**************+*********+****++*********+**+++++*+++++*+**+++++++++++**++***#@@@@%@@@%#%#*********+++**+++*********+***+********+******+**+*****#%%@@@@@@@@@@%##********#%%@%@@%@@@@@#**********##%%%%#%@@@@@@@@@@%%%@@%%*##**************
*#***########************##*######*############*****+***#********************************#*****###*******#**###*#########*****++***+++*****+++++++******++*+*++++**+***++**+****************+********+++******+++***********+*****+++++++***++*++***#@@@%%%%%%##**********+*********+++*+*****+*****+***++***++*****+*##%%@@@@@@@@@@%##********#%%@@@%%@@@@@#**********#%%%%%%#@%@@@@@@@@%%%%%%##***************
*#****************************#####***#####*+++***********************+*****+*****************************###**###*###**#******###***********+++++++++****+**+++++***++**+*****++++*************+*+**+*******************++++++***********************%@%%%%%%%%%%******++*+********************************************#%@@@@@@@@@@@@#*********#%%@@@@@@@@@@#***#*****##%%%%%%%%%@@@@@%@@%%%%%%%#**************
***##******+***++***++++++***##****++***************++++++**++**+++++++++++++++++++++********+*****************+*+*+++++*+++++++++***+++******++++++++******+*++***+*+++++++++++++*++++++++**+++*++++++++++++*+*++++++++++++++++++*++***+**+++**+++***#%@%%%%%%%%%********+***+*****************************************##%@@@@@@@@@@@@***********%%@@@@@@@@@@%#********###%%%%#%#%@@@%%%@@%@%%%%#%#*##*********
****************++*********************++++***++++*+***++*******************++++++++++**++*******+++**********+++++***+*++++++*****+++++++++*+*+++++++++**+++*****+*++++++++++++++++++++++++++*+****++++++++++*+++***********+****+++****+++**+***+*+**#%%%%%%%%%%#******************************************************##%%@@@@@@@@@@%*#********##%@@@@@@@@@@@%#*********##%%##%#%@@%%%%%@%%#%%#########******
**********+****+*****************+++**+++*++=++=+++++*+**+**+******************+++******************+***********++++*+++++++++++*++*+++++++*++++++++++++++**+*****+*++++++++++++++++++++++*++*++**+****+******+********+****************+*++***++++++***%@%@%%@%%%#**********+*******#**************#*********+***********#@@@@@@@@@@@@@%*#********#@@@@@@@@@@@%%%**********####%#%#%%%%%%%%%%%#%%##*####*##**#*
****++******************+***********+++*++++++++++*******+*+********#***********+*+*********++*+*****+*+*******++++++*++++++++++*+++**+**++++**+*++++++++++****+++**++++++++*+++++++**+++++*********+*****************************++++++*******+++++*****#%%%@@%%%***********+*****************+************++++**********#%@@@@@@@@@@@@%*********#%@%@@@@@@@@@%%%***********##%%%%#%%#%%%%%%%%############*####
#***************#**************++*+*+*+*+++*++++++++*+****+++**#***********#***********************+***+++*****+****+++*++++++++++*******+*+*+++++****+********+**+++*****++********+*+***++******++*++******+*******************+++++*+*******************#%%%%%%***********+**********+*******************++++****+*+***#%@%@@@@@@@@@%#**********#%@@@@@@@@@@%%#*************######%%##%%%%%##################
*******************#***++++*+***++++**********+++++***************#*#*##***#**********************++*+***************+++++++++++++++**#******++++**************++++++++******************************++*****************++**++*+*+++++*****+******************%%%#*++*****************++++***+**+++*++*******+++++***++***#%%%@@%@@@@@%#************#%@@@@@@@@%%#***+*************#########%%%%####**###########
#*****************###***++*+******+*******+*+***+++***##*******############**#*#***************#**+**+***************+++++++++++*******##**##*+********#*#*********+++++*****************************+++*+*****++++**+**+*+++++*+++******+***+********+++*++****+++++++++++++++*+*+****+**+++++*+++**+****************+***#@%@@@@@@@%##*************#%%@@@@@@@%#**********+******#*##########%#%################
#************##*#*#####***#***+*+*****###******+*++++*####******################**#*#********##********+***+++*++++++++*******++*+*+*****#*********+*****#*****+++++*****++*************************************++++***+*+++++++++++++**++**++********+*++++++++++****++++++++++++++++++**+++***************************#%%%@@@@@@%%#******+********#%%@@@@@@%#************+*****#**########*#################**
##**####*#****#*############*#*******#######*##***+****####*#*######################**####*#****#*#****+*+++++++++++++++**********++*+******#**++*+***+*********************+++***********+****+++************+*+*++**++++++++++*++++**++++**+***********+++++++***+*+++++++++++++++++++++**+***+********+****+********#%%%%@@@@%%###***************%%%@@@@@%#*******************########*#######*#######*##****
######**##############%######***********#######******##*######*################*#########***************+=+++++++++++**++++********++************+**+**+++++++++*******++*++++++++**+++++++++++*++++++*++***+++**++++++++++++++++++++++++++*+++*****+***++++***********+*+**+++++++**++++++++*************************#%%%@%@@%%#**************+***#%%@@@@@@##******************##*###*#################****#***
########*##############%#######*********#######***#####*#*###*#*########################***************++++++++++++++++++*+*+******+*+*****++*+*********++++++++*+******+++++++++++++++++++++++++++++++++++++*+*++++*++++++++++*+*+++++++++++*****+*****+**+********++********++++++**+++**++*******+*+*************##%%@@@@@%###*************+****#%%%@@@@##**#**##*#********#####**#**#################*******
*###################%%##%########******#***#####**#######********#***####*#####**###****#***************+++++++++++++++****++++******+++***+++++++++***++++++++++++++++++++++++++++++*++++++++++++++++++++++++*++++*++++++++++*****+++++++++****+*************+++****+*+********++++***++++**+********************###%%%@@%@####******************#%%%%@@@%###******#**#**#***###**#**###########**#######******
#*####%####%%###%#%%%%%%%######*###*####***######*#*****##****+******###**#*****************+++==+*******+++++++++++++++++*+++++++*++++++++++*++++++++++*++*++*++++++++++++++++++++++++++++++++++++++++++++++++**++*++*+++++++++++++***+++*******+*********+**+*****++*******+++++++++**************************##%#%%%@@@%##*********************#%%@@%@%#**#**************************##########*#**#*###*****
####%#%#####%%#%#%%%%%%%%###############*##*#*#****+*****************************************++++++*****++++*++++*+++++++++++**+++++++++++++*++++++++++++++++*+++************+++++*+++++++++++++++++++++++++++++**+++++++++*++********+++******************++*******+**********+++++**************************##%%%%%%@@%##**####****************#%%@@@@%#****************##*************####*##***##*****#*****
##%%%#%%#%%%%%##%%%%%%%%%%###%###############*****+++****++**++++*+*++*******+****************++*+++**+***+***+******++=++++*+***+++++++++**+++++++*+++++++*****+********+*****+**+*++++++++++***++++++*****+***++++++++*+****+******+**************#*******+++************+********+***+***++***************##%%%%%@@@%##******##**************#%%%@@@%##******************#***********#*#*###*######*###******
%%%%%%%#%%%#%%%%%%%%%%%%%%%%%%##%%%##########******+***+***++++*++++*++***+*+++*++*****++******++++++****+*********++*++*++++++++++++++++++**++++*+++++*+*****+**+*********+*********+++++++++++++++**+*****++**+*+****************************+********************************++****************+*+*+*****#%%%%%@@@@%%##*********************#%%%@@@@#*********************##**###*#***#**##***####****#****#*
%%%%%###%#%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%######************+**+***+++++++++++*++++********++*****+********************+******+++++++++++++*++++*++++***++*******************+*****++++++++++++++*+***+********+********************************+*+++*******************+++*++++***+***********++++***++*+***##%#%@@@@%%##*****************+****##%%%@@@%##****************************###*####**#######**###***##
##%%#%#####%%%%%%%%#%%#%%%%%%%%%%%%%#%%%######*******++**+++*++******+++++++++++++*****+*+********+***************************++++++++++++****************************+++*+++++++++++++*++++*++*+**********+*++++*+********************++++++++++*************++*******+++**++************+*++++++*+****#%%##%%%@@@@%#****************+*++**#%#%%%@@@%##*#************#**********##****##########*#****########*
###%#####%###%%%%%%%###%%%%%%%%##%%%%%%%%###******************++***+***++**+++*+**+****++++++*+**********+**#*******#***#****+++*+*+++++**+*****+*++**************+**++*++*++++++++*******+********************+********************+***+*+++++++********+****+++*****++*++****+++++*+*++*++*+++++++****%%##%%%@%####*****************+*****%#%%%%@@%%#***********#***######**#############%####################
##########%###%%%%%######%%%%%###%%%%%%%##############********+*****+**+*++++++********+**++***************#******###*##************++***********++++++++++*********+++++++++++++++++++++******+**+******************+++**+*+++++****++++++++++*******+++++*+++++++++++*+++++++++++++++++++++++++***+*#####%%%%%#*******************++++***###%%%@%@@#******#***#######*###################%%%###########%######
######%####%%##%%%%#############%###%%%%%##############**####****************+*****************#******#**################**********#*****+***++***+*++++++**+*******+++++++++++++++++++++++++++**+********************+****+++++*********+++++++++++++==+++=+++++++++++++++++++++++=++++++++++++*++**#*###%%%%%%%#***###**************+***%%%%%%@@@%#*#*#***###**############%#%############%######%%###########
#%#######%##%##%#%%####%%####################################*##*******************************#*#*###**##*#############*********#**********+*******+++****************+++++++++++++++++++++++++++++******+*******+++++*++*++++++++++++++++++++++=++++++++======+++++++++++++++++++++++***++++*+*++**#*#####%%%%%%#######*########******##%#%%%@@@###***##################%###%%%%#%####**###########%%%#%##%#%#
##%######%%%#######*###%%%#*#############%###%#############*****#**************####****####**#*#############################****##*#***#****++**+**+++++++++*+++++++++++=======++++++++++++++++++++=+++++++++++++++++*++****++++++++++++++=+=++++=====++++++==++++++++++++++++++++*+*+*+++*+++++++*****##%%%%###%%%%%%##%%#########****##*##%%@@@%##***#################%##%%#%%%#%#%%#####%%%%######%%%%%###%##
###%##################*#*#***#############################*****#********+******########**##########**###########%##%%%#######*********************++++++**+++++++++++=+++++++++++++++++++++++++++++==+++++++++*++++++++++++++++++++++++++========+++++++++++++++++++++++++++++++**********++++++++***********#####*#*****##*##*#######*#*####%%@@%%#######%%#######%#%%%%#%%%%%%%%%%%%%##%%%##########%###%#%%##
##%%#########%########*#**+**********#########**#########**********************+**######***#################%%##%%%%%%%########***************+*++***++*****+*++++++++++++++++++++++++++++*+++++=++++++++++++++++++++++=++++++++++++++++++++++++++++++++++++++++++++++++++++*+*+*++**++++++++++++++*******+**********************#####****###%%%%###################%%%%##%%%#%%#%%%######%%##############*#####
#############%%##########********####**####*##****####******************#***##**########*#*#########%########%%##%%%#%%#%#########****************+**********+++*+++++++++++++++++*+++++*+++++++++++++++++++++++=++++++++++++++++=++++++++++++=+++++++++++++++++++++++++=++++++++++++++++++*+++++++*+*++**+++**********************##**#***######*#*#*#**#######*##*#######%%#%%%%############*#*#########*#####
#############*############***********#*##***#####*****************************#**####%%%######%#%%######%#############%##%#%#############******#*************+++++++++++++++++++++++++++++=++++=++=+++++++++==+=+++==+==++++++++++++++++++++====+++++++++++++++==+++++==++=====++++===+++++++++++++++++++++++++++++***+++++++++****++**************##***+**##********#####%##%##########*####*****########*####*
#########%#########################**###******####**************************#########%%%%%%%%%#%#%%#%%#######*###########################****************************++++++++++++++++++*+++++++++++++++++++++++=+++++++++++++++++++++++=+++++++++++++++++++++++++++++***+++++++++++++++++++++++++++++++++++++++++++***+++++++***++++++++++++*+*+********************################*##*#######**#*########**##*
#####%%%%%###################**########**#*#***#*##***#*****************################%%%%%%%%#%#%#####*#****#*##################**##########*#**+***************++++++++++++++***++++++++++++***++++*****+++***++*****++***++++++===+++====+++===========++++++++++++++++++*++*++++++****++***********+*++++*++**++++++++++*++**********+****************#*******#****#***################********####*#****#
###%%%%%%%%%%#################**#############*#*************************############%#####%#%%%####%%##%%##*********###*#*#######*#*****###########*****************++++++*++++**+*+***+++++*+***++*+****+**+****+***++++**++++++++++++++=++=+====+++========+++++++++++++++++++++++++******************+++++*+*++++++++++++*+*************************+***************************###*#########**#######*######
#####%%####%%%####%##%#####################*###**********************#**#**######%%%####%#################**#*****#######***##########***#****######****#******************************+++++++++***+++++*****+**********+++*++++**+++++++++++++++++++++++++++*++++++++++++++++=+++++++++++*++++*++++++++++***********++******************###***********************************###*#**######################*###
#######%####%%####%####%########*############*****##########**************###################*#########******###########****#*****#***************#******************************************+++*+++++**++***++*****+**+++++***+++++++++++++++++++++++*+**+++*+++++++*++++++++++++++++++++*++++++++++++++++*++++++***++++**+**********************************************+**##******************#########*#*#**
################%##%%###########################*###*###**#####**#******####*#################*##****########*###******########************************+***+**********#******************+******+++***++++**+*++*******++*+++*****++++++++++++++++*+++++++++++*+++++++++++++++++++++++++++++++++++++++++++++*++++*****+***+++************##************+***********************+****************#####****###*##*
#######%%%%%#####%###%%######*##############################****#*####*#####################*##*#######****#*######***#*######*********************************************++********+**********++**++*++++*++******+++++++***+*+++++++++++=+++++++++++++++++++++++=++++++++++++++++++++++++++++++++++++++**+++++****+++++++*******+*+*****************+************************************###***##************

As a disclaimer, the choice of which software to build matters, but it’s not going to make or break your ability to succeed.
You don’t marry the idea, you marry the people who’s problem it solves. The ideas come and go because products pivot, they solve the same problem in different ways, or they solve different problems altogether.
Get Ideas by Finding Problems
Notice how I didn’t title this section “Coming up with an idea.”
The phrase “coming up with an idea” puts you into a mindset that forces you to use your own creativity to make up a hypothetical problem for a hypothetical person. This will make you hypothetical money.
We want to solve for things that exist in the real world for real people who have real problems. This will make you real money.
I also want to point out that we’re not finding ideas, we’re finding problems. Ideas are worth a dime a dozen. People don’t pay for those, they pay to have their problems go away.
“Solve problems for people and you’ll never run out of a job.”
Your software idea should have an origin story that has names of real people experiencing tangible pain.
Here’s the story of how I came up with the idea for my first successful software.
It began with a simple DM to my friend Connor. I was loosely connected with him through college, and I reached out to grab coffee and learn about his social media marketing business, Aebly Studio.
We met up at Moxie, a coffee shop off of 16th St just south of Camelback Rd in Phoenix, AZ.
I was just a few months in to doing freelance software development full time after quitting my job doing marketing for a solar power company.
I wasn’t searching for a pain point that could be solved with software, I was just looking to learn about the business and how they operated, especially since I had a background in social media marketing.
We discussed all sorts of different aspects of their business. At some point though, Connor shared that they were texting clients pictures they were going to use for their client’s posts. They also texted over the captions.
This became a bottleneck for them as it was slow and difficult to get multiple posts approved at a time.
There were solutions in the market, but none were tailored to their specific needs.
I decided to build a prototype for a software that could do Instagram post approval with their clients and had it finished in a day or two.
At the time, I had no idea what I was doing. But as we’ll see, I had actually stumbled across an idea that I would grow into a software that would later be acquired.
With that story in mind, let’s evaluate why it was a good idea and discover a way to discern which software ideas are worth prioritizing over others.
Evaluating Your Software Idea
The following is a list of questions to evaluate if your start-up idea is good.
Knowing that the software from my story ultimately resulted in a successful acquisition, we’ll use my start-up as an example evaluation.
Do you have founder-market fit?
- Areyouuniquely qualified to solve this problem?
- Can you build it and understand the customer better than most?
Since I had experience and domain expertise in social media from a job in the past, and personally knew the importance and difficulty of getting posts approved, I understood the problem very well and was equipped with development skills to bring the solution to life with my unique understanding of the problem.
Is the market big?
- Either it’s big now or growing rapidly.
- Example: Coinbase started small in a niche market, but the upside was massive.
Social media management is one of the largest fields in marketing today with hundreds of thousands of potential customers.
Is the problem acute?
- Do usersneedthis, or just kind of want it?
- Example: Before Zoom, many remote teams struggled with unreliable, clunky video conferencing tools like Skype or WebEx that constantly dropped calls or had poor video quality. The demand for something thatactually workedwas an acute pain for distributed teams and companies going remote fast.
Without an efficient way to get posts approved, Connor’s business would be constrained by this issue. They needed a way to get this done, or they wouldn’t be able to scale. It was a need.
Is there competition?
- Surprisingly,yesis often agoodanswer.
- It shows the market is real. You just need an insight they missed.
Other post-approval tools existed, just none that they liked. Most software in the space were focused on providing a full suite of tools that didn’t apply to Aebly Studio’s approach to social media. They didn’t need post scheduling or AI post generation, they just needed a way to get posts approved. Providing a simple product made this solution stand out. This made the target audience smaller, but that wasn’t an issue to me.
Do you or people you know want this?
- If not, you may be solving something no one actually needs.
I had a personal relationship with the first customer, Connor. They had a problem and were both willing and able to pay for it.
Bonus Questions For Evaluating An Idea
Some questions will apply more to some ideas that others. In my case, the following questions were less applicable.
Would you be a customer of your own software?
- If you would build this to solve a problem for yourself, odds are that there are other people who have the same problem.
I wasn’t going to be using this software myself, but since I had a good relationship with the target customer used, I could rely on their feedback and insights to make changes, in addition to having insights to it myself.
Would you work on this for years?
- You don’t need tostartpassionate, but success often makes the work exciting.
I sold this software in it’s infancy because I wasn’t interested in continuing to grow it as a company. So I’d definitely recommend thinking through this depending on your goals.
Has something changed recently?
- New tech, regulation, or social behavior? These often create new opportunities.
- Example: Checker’s API for background checks emerged as delivery services boomed.
Nothing had recently changed, but that wasn’t necessary for my idea.
Is it in a good idea space?
- Some spaces (e.g. fintech infrastructure, vertical SaaS) have better success rates than others (e.g. ad tech, consumer social).
I would venture to say that the social media software for businesses is a good space, but I haven’t done the research on it.
Are there good proxies?
- A successful startup in another market or region can signal opportunity.
- Example: Rappi saw DoorDash succeeding in the U.S. and adapted it for Latin America.
Does the target audience have the money to pay for it?
- If not, you may be creating a business that can’t breathe.
Final Thoughts
Search for ideas in the pains you experience in your field of expertise or through talking with people who have expertise in a field.