diff --git a/tock/graphs.py b/tock/graphs.py
index <HASH>..<HASH> 100644
--- a/tock/graphs.py
+++ b/tock/graphs.py
@@ -41,6 +41,27 @@ class Graph(object):
         self.edges[u].setdefault(v, [])
         return self.edges[u][v]
 
+    def only_path(self):
+        """Finds the only path from the start node. If there is more than one,
+        raises ValueError."""
+        start = [v for v in self.nodes if self.nodes[v].get('start', False)]
+        if len(start) != 1: 
+            raise ValueError("graph does not have exactly one start node")
+
+        path = []
+        [v] = start
+        while True:
+            path.append(v)
+            u = v
+            vs = self.edges.get(u, ())
+            if len(vs) == 0:
+                break
+            elif len(vs) > 1:
+                raise ValueError("graph does not have exactly one path")
+            [v] = vs
+
+        return path
+
     def shortest_path(self):
         """Finds the shortest path from the start node to an accept node. If
         there is more than one, chooses one arbitrarily."""
add Graph.only_path()