main solution