O(n+d) time algorithm for stronly connected directed graph components in go