Algorithm 1
Algorithm 2
Algorithm 3 - best one till date
Algorithm 4