Если проблема слишком сложна, разбейте ее на несколько. Делите на части и побеждайте каждую из них поодиночке.