add topolgical sorting