#include <bits/stdc++.h>
using namespace std;
class graph
{
int v;
list<int> *adj;
public:
graph(int v)
{
this->v=v;
adj=new list<int>[v];
}
void add_edge(int a,int b)
{
adj[a].push_back(b);
}
void bfs(int start,bool visited[])
{
queue<int> q;
q.push(start);
visited[start]=true;
list<int>::iterator it;
for(it=adj[start].begin();it!=adj[start].end();++it)
{
if(!visited[*it]){
q.push(*it);
visited[*it]=true;
//note: always pass by address otherwise nothing will be added
bfsUtil(*it,visited,&q);
}
}
while(q.size())
{
cout<<q.front()<<"->";
q.pop();
}
}
void bfsUtil(int start,bool visited[],queue<int> *q)
{
list<int>::iterator it;
for(it=adj[start].begin();it!=adj[start].end();++it)
{
if(!visited[*it]){
(*q).push(*it);
visited[*it]=true;
bfsUtil(*it,visited,q);
}
}
}
void bfsEachVertex()
{
queue<int> q[v];
bool visited[v];
for(int i=0;i<v;i++)
{
memset(visited,false,sizeof(visited[0])*v);
for(int j=0;j<v;j++)
cout<<visited[j];
cout<<endl;
bfsEachUtil(i,visited,&q[i]);
}
for(int i=0;i<v;i++)
{
while(q[i].size())
{
cout<<q[i].front()<<"->";
q[i].pop();
}
cout<<endl;
}
}
void bfsEachUtil(int start,bool visited[],queue<int>* q)
{
(*q).push(start);
visited[start]=true;
list<int>::iterator it;
for(it=adj[start].begin();it!=adj[start].end();++it)
{
if(!visited[*it])
{
bfsEachUtil(*it,visited,q);
}
}
}
};
int main() {
// your code goes here
int v;
cin>>v;
graph g(v);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int a,b;
cin>>a>>b;
g.add_edge(a,b);
}
bool visited[v];
memset(visited,false,sizeof(visited[0])*v);
//g.bfs(2,visited);
g.bfsEachVertex();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNsYXNzIGdyYXBoCnsKCWludCB2OwoJbGlzdDxpbnQ+ICphZGo7CglwdWJsaWM6CglncmFwaChpbnQgdikKCXsKCQl0aGlzLT52PXY7CgkJYWRqPW5ldyBsaXN0PGludD5bdl07Cgl9Cgl2b2lkIGFkZF9lZGdlKGludCBhLGludCBiKQoJewoJICBhZGpbYV0ucHVzaF9iYWNrKGIpOwoJfQoJdm9pZCBiZnMoaW50IHN0YXJ0LGJvb2wgdmlzaXRlZFtdKQoJewoJCXF1ZXVlPGludD4gcTsKCQlxLnB1c2goc3RhcnQpOwoJCXZpc2l0ZWRbc3RhcnRdPXRydWU7CgkJbGlzdDxpbnQ+OjppdGVyYXRvciBpdDsKCQlmb3IoaXQ9YWRqW3N0YXJ0XS5iZWdpbigpO2l0IT1hZGpbc3RhcnRdLmVuZCgpOysraXQpCgkJewoJCQlpZighdmlzaXRlZFsqaXRdKXsKCQkKCQkJcS5wdXNoKCppdCk7CgkJCXZpc2l0ZWRbKml0XT10cnVlOwoJCQkvL25vdGU6IGFsd2F5cyBwYXNzIGJ5IGFkZHJlc3Mgb3RoZXJ3aXNlIG5vdGhpbmcgd2lsbCBiZSBhZGRlZAoJCQliZnNVdGlsKCppdCx2aXNpdGVkLCZxKTsKCQkJfQoJCX0KCQoJCXdoaWxlKHEuc2l6ZSgpKQoJCXsKCQkJY291dDw8cS5mcm9udCgpPDwiLT4iOwoJCQlxLnBvcCgpOwoJCX0KCX0KCXZvaWQgYmZzVXRpbChpbnQgc3RhcnQsYm9vbCB2aXNpdGVkW10scXVldWU8aW50PiAqcSkKCXsKCQoJCWxpc3Q8aW50Pjo6aXRlcmF0b3IgaXQ7CgkJZm9yKGl0PWFkaltzdGFydF0uYmVnaW4oKTtpdCE9YWRqW3N0YXJ0XS5lbmQoKTsrK2l0KQoJCXsKCQkJaWYoIXZpc2l0ZWRbKml0XSl7CgkJCSgqcSkucHVzaCgqaXQpOwoJCSAgICB2aXNpdGVkWyppdF09dHJ1ZTsKCQkJYmZzVXRpbCgqaXQsdmlzaXRlZCxxKTsKCQkJfQoJCX0KCX0KCXZvaWQgYmZzRWFjaFZlcnRleCgpCgl7CgkJcXVldWU8aW50PiBxW3ZdOwoJCWJvb2wgdmlzaXRlZFt2XTsKCQkKCQkKCQlmb3IoaW50IGk9MDtpPHY7aSsrKQoJCXsKCQkJbWVtc2V0KHZpc2l0ZWQsZmFsc2Usc2l6ZW9mKHZpc2l0ZWRbMF0pKnYpOwoJCQlmb3IoaW50IGo9MDtqPHY7aisrKQoJCQljb3V0PDx2aXNpdGVkW2pdOwoJCQljb3V0PDxlbmRsOwoJCQliZnNFYWNoVXRpbChpLHZpc2l0ZWQsJnFbaV0pOwoJCQkKCQl9CgkJZm9yKGludCBpPTA7aTx2O2krKykKCQl7CgkJCXdoaWxlKHFbaV0uc2l6ZSgpKQoJCQl7CgkJCQljb3V0PDxxW2ldLmZyb250KCk8PCItPiI7CgkJCQlxW2ldLnBvcCgpOwoJCQl9CgkJCWNvdXQ8PGVuZGw7CgkJfQoJfQoJdm9pZCBiZnNFYWNoVXRpbChpbnQgc3RhcnQsYm9vbCB2aXNpdGVkW10scXVldWU8aW50PiogcSkKCXsKCQkoKnEpLnB1c2goc3RhcnQpOwoJCXZpc2l0ZWRbc3RhcnRdPXRydWU7CgkJbGlzdDxpbnQ+OjppdGVyYXRvciBpdDsKCQlmb3IoaXQ9YWRqW3N0YXJ0XS5iZWdpbigpO2l0IT1hZGpbc3RhcnRdLmVuZCgpOysraXQpCgkJewoJCQlpZighdmlzaXRlZFsqaXRdKQoJCQl7CgkJCQliZnNFYWNoVXRpbCgqaXQsdmlzaXRlZCxxKTsKCQkJfQoJCX0KCX0KfTsKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglpbnQgdjsKCWNpbj4+djsKCWdyYXBoIGcodik7CglpbnQgbjsKCWNpbj4+bjsKCWZvcihpbnQgaT0wO2k8bjtpKyspCgl7CgkJaW50IGEsYjsKCQljaW4+PmE+PmI7CgkJZy5hZGRfZWRnZShhLGIpOwoJfQoJYm9vbCB2aXNpdGVkW3ZdOwoJbWVtc2V0KHZpc2l0ZWQsZmFsc2Usc2l6ZW9mKHZpc2l0ZWRbMF0pKnYpOwoJLy9nLmJmcygyLHZpc2l0ZWQpOwoJZy5iZnNFYWNoVmVydGV4KCk7CglyZXR1cm4gMDsKfQ==