Implementing Breadth First Search