Input distances usually define only a small fraction of the interatomic distances in the system. However, they do imply upper and lower bounds on the other atoms to which they are connected by means of the triangle inequalities (Crippen and Havel 1988). Determining these implied bounds is equivalent to a well-studied computational problem, finding the shortest path between two points in a directed graph. The shortest-path algorithm used in this implementation is that of Dijkstra (see Tarjan 1983 for a review). It proceeds by calculating the shortest paths from one atom (the root) to all other atoms. The shortest-path routine calculates both upper and lower bounds by keeping track of two halves of the graph, one that holds the upper bounds and one that holds the lower. By solving the shortest-path problem for the upper bounds first, the program can then calculate the lower bounds by continuing the shortest-path routine with the second half of the graph. This process is repeated, with each atom taking its turn as root.