#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,a[1005][1005],head[100005],ver[100005],nxt[100005],tot=0,d[1005],x[100005];
struct node{
int x,y;
}h[100005];
bool cmp(node a,node b){
return a.y>b.y;
}
void add(int x,int y){
ver[++tot]=x;
nxt[tot]=head[x];
head[x]=tot;
}
int main()
{
memset(head,-1,sizeof(head));
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>h[i].x>>h[i].y;
a[h[i].x][h[i].y]=1;
a[h[i].y][h[i].x]=1;
d[h[i].x]++;
d[h[i].y]++;
}
sort(h+1,h+n+1,cmp);
for(int i=1;i<=m;i++){
add(h[i].x,h[i].y);
add(h[i].y,h[i].x);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
for(int i=1;i<=n;i++){
cout<<d[i]<<" ";
for(int j=head[i];j!=-1;j=nxt[j]){
cout<<ver[j]<<" ";
}
cout<<endl;
}
return 0;
}
RT,求调