everything done except for bidirectional search