//#include<stdio.h>
//char map[10][10]={};
//int check[10][10]={},varr[12][12]={};
//void f(int x,int y)
//{
// if(x>9||x<1||y>9||y<1)
// {
// return;
// }
// if(varr[x][y]!=0)
// {
// check[x][y]=1;
// map[x][y]=varr[x][y]+48;
// return 0;
// }
// map[x][y]=48;
// check[x][y]=1;
// for(int a=-1;a<=1;a++)
// {
// for(int b=-1;b<=1;b++)
// {
// if(a==0)
// {
// if(b==0)
// {
// continue;
// }
// }
// if(check[x+a][y+b]!=1)
// {
// f(x+a,y+b);
// }
// }
// }
//}
//int main()
//{
// int i,j,r,c,arr[10][10]={};
// for(i=1;i<=9;i++)
// {
// for(j=1;j<=9;j++)
// {
// scanf("%d",&arr[i][j]);
// map[i][j]='_';
// }
// }
// for(i=1;i<=9;i++)
// {
// for(j=1;j<=9;j++)
// {
// if(arr[i][j]==1)
// {
// for(int x=-1;x<=1;x++)
// {
// for(int y=-1;y<=1;y++)
// {
// if(x==0)
// {
// if(y==0)
// {
// continue ;
// }
// }
// varr[i+x][j+y]++;
// }
// }
// }
// }
// }
// scanf("%d %d",&r,&c);
// if(arr[r][c]==1)
// {
// for(i=1;i<=9;i++)
// {
// for(j=1;j<=9;j++)
// {
// if(i==r&&j==c)
// {
// printf("-1 ");
// continue;
// }
// printf("%c ",map[i][j]);
// }
// printf("\n");
// }
// return ;
// }
// else
// {
// f(r,c);
// }
// for(i=1;i<=9;i++)
// {
// for(j=1;j<=9;j++)
// {
// printf("%c ",map[i][j]);
// }
// printf("\n");
// }
//}
#include<stdio.h>
int a1=0,m[101]={},u,a,v[101]={},p=0,arr[101][101]={},varr[101][101]={};
void f(int k)
{
int i;
for(i=0;i<p;i++)
{
u=v[i];
varr[k][u]=1;
}
v[p]=k;
for(i=1;i<=a;i++)
{
if(arr[k][i]==1)
{
p++;
f(i);
}
}
}
int main()
{
int b,i,j,c,d,q=0;
scanf("%d",&a);
scanf("%d",&b);
for(i=0;i<b;i++)
{
scanf("%d %d",&c,&d);
arr[c][d]=1;
}
for(i=1;i<=a;i++)
{
for(j=0;j<=p;j++)
{
v[j]=0;
}
p=0;
f(i);
}
for(i=1;i<=a;i++)
{
for(j=1;j<=a;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
printf("\n");
for(i=1;i<=a;i++)
{
for(j=1;j<=a;j++)
{
printf("%d ",varr[i][j]);
}
printf("\n");
}
for(i=1;i<=a;i++)
{
if(varr[i][1]==1)
{
for(j=1;j<=a;j++)
{
if(varr[i][j]==1)
{
if(i==j)
{
continue;
}
for(int f=0;f<q;f++)
{
if(j==m[q])
{
a1=1;
break;
}
}
if(a1==1)
{
continue;
}
a1==0;
m[q]=j;
q++;
}
}
}
}
printf("%d",q);
}