#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int n , m;
const int N = 1001;
int g[N][N]; // ÁÚ½Ó¾ØÕó
int h[N] , ne[N] , idx , cnt[N]; // ÁÚ½Ó±í
priority_queue<int , vector<int> , greater<int> > e[N];
void add(int u , int v){
e[u].push(v);
ne[idx] = h[u];
cnt[u]++;
h[u] = idx++;
}
int main(){
cin >> n >> m;
memset(h , -1 , sizeof h);
for(int i = 1;i <= m;i++){
int u , v;
cin >> u >> v;
g[u][v] = g[v][u] = 1;
add(u , v) , add(v , u);
}
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++) cout << g[i][j] << " ";
cout << endl;
}
for(int i = 1;i <= n;i++){
cout << cnt[i] << " ";
while(!e[i].empty()) cout << e[i].top() << " " , e[i].pop();
cout << endl;
}
return 0;
}