public static <E> Node<E> graphClone(Node<E> node) {
		if(node==null) return null;
		Queue<Node<E>> q=new ArrayDeque<>();
		Map<Node<E>,Node<E>>map=new HashMap<>();
		q.offer(node); map.put(node,new Node<E>(node.val));
		while(!q.isEmpty()) {
			Node<E>c=q.poll(),cc=map.get(c);
			for (Node<E>nei:c.neighbors) {
				Node<E> nc=map.get(nei);
				if (nc==null) {map.put(nei,nc=new Node<E>(nei.val)); q.offer(nei);}
				cc.neighbors.add(nc);
			}
		}
		return map.get(node);
	}