public boolean isIsomorphic( Graph other )
	{
		Node current,otherCurrent;
		NodeQueue q = new NodeQueue();
		NodeQueue otherQueue = new NodeQueue();
		q.push( graph.start );
		otherQueue.push( other.start );
		current = graph.start;
		int numArcs = 0;
		otherCurrent = other.start;
		while ( !q.isEmpty() && !otherQueue.isEmpty() )
		{
			current = q.pop();
			otherCurrent = otherQueue.pop();
			ListIterator<Arc> iter = current.outgoingArcs();
			while ( iter.hasNext() )
			{
				Arc a = iter.next();
				Arc b = otherCurrent.pickOutgoingArc(a.versions);
				numArcs++;
				if ( a == null )
				{
					graph.clearPrinted();
					other.clearPrinted();
					return false;
				}
				if ( b == null )
				{
					graph.clearPrinted();
					other.clearPrinted();
					return false;
				}
				else
				{
					a.to.printArc(a);
					b.to.printArc( b );
				}
				if ( a.to.allPrintedIncoming() )
				{
					q.push( a.to );
					if ( b.to.allPrintedIncoming() )
						otherQueue.push( b.to );
					else
					{
						graph.clearPrinted();
						other.clearPrinted();
						return false;
					}
				}
			}
		}
		graph.clearPrinted();
		other.clearPrinted();
		return true;
	}