public static <E>List<List<E>> printLevel(TreeNode<E> tn) {
		Queue<TreeNode<E>> q=new ArrayDeque<>(Arrays.asList(tn));
		Queue<E> vq=new ArrayDeque<>();
		List<List<E>> rel=new ArrayList<>();
		while (!q.isEmpty()) {
			for (int i=0, n=q.size(); i < n;++i) {
				TreeNode<E> c=q.poll();
				vq.offer(c.val);
				if (c.left!=null) q.offer(c.left);
				if (c.right!=null) q.offer(c.right);
			}
			rel.add(new ArrayList<>(vq));
			vq.clear();
		}
		return rel;
	}