int BFS(Node start,Node target){
Queue<node> q;
set<Node> visited;
q.offer(start);
int stop = 0;
while(q not empty){
int sz = q.size();
for(int i = 0;i<sz;i++){
Node cur = q.poll();
if(cur is target) return step;
for(Node x : cur.adj())
if(x not in visited){
q.offer(x);
visited.add(x);
}
}
step++;
}
}