#include<bits/stdc++.h>
using namespace std;
//链式前向星本质上是通过将连接的边单独存储,而用head存储对应数据的下标来实现高效的读入
//这相比邻接矩阵更节省空间,相比vector由于不用动态开内存速度更快
struct Edge{
int to,next;
//to 表示当前节点相连的节点,next是指下一条以相同节点为起点的边在 edge 数组中的下标。
}edge[200005];//无向边开两倍内存因为要创建两次
int head[100005];
int cnt = 0;
// u 表示当前节点 v 表示连接的点
void addedge(int u, int v){
edge[cnt].to=v;//创建边指点边连接的节点为v
edge[cnt].next=head[u];//确认下一个连接的点的坐标(由于这里先更新,所以指向的是上一次创建的边的下标方便查询
head[u] = cnt;//更新下一个连接此节点的下标
cnt++;
}
int main()
{
int n,m;
cin >> n >> m;
for(int i = 1; i <=n; i++) head[i]=-1;
for(int i = 0; i < m; i++)
{
int a,b;
cin >> a >> b;
addedge(a,b);
addedge(b,a);
}
for(int i = 1; i <= n; i++){
vector<int> neighbors;
for (int j = head[i]; j != -1; j = edge[j].next) {
//j!=-1说明这个连接的点还没有读取完, j一直是edge的下标
neighbors.push_back(edge[j].to);
}
if (neighbors.empty()) {
cout << "None" << endl;
} else {
int l = neighbors.size();
sort(neighbors.begin(), neighbors.end());
for (int k = 0; k < l; k++) {
cout << neighbors[k] << (k == l - 1 ? "" : " ");
}
cout << endl;
}
}
}