TODO: toposort.py