#include <iostream>
using namespace std;
int n,m,i,j,a,b,head,tail,ans;
int graph[100][100];
int degree[100];
int len[100];
int queue[100];
int main() {
cin>>n>>m;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
graph[i][j]=0;
for(i=0; i<n; i++)
degree[i]=0;
for(i=0; i<m; i++) {
cin>>a>> b;
graph[a][b]=1;
(degree[b]++);
}
tail = 0;
for (int i=0; i<n; i++)
if(!degree[i]) {
queue[tail]=i;
tail++;
}
head= 0;
while (tail<n) {
for (i=0; i<n; i++)
if (graph[queue[head]][i]== 1) {
(degree[i]--);
if (degree[i]==0) {
queue[tail] = i;
tail++;
}
}
(++head);
}
ans = 0;
for (i=0; i<n; i++) {
a =queue[i];
len[a]=1;
for (j=0; j<n; j++)
if(graph[j][a]==1&& len[j]+1>len[a])
len[a]=len[j]+1;
if((len[a]> ans))
ans = len[a];
}
cout<<ans<<endl;
return 0;
}
#include <iostream>
#include <cstring>
#define LL long long
using namespace std;
LL l, r;
LL f[12][10][10][2][2][2], a[20];
LL Dfs(LL now, LL p, LL pp, LL _4, LL _8, LL top, LL hw) {
if(_4 && _8)
return 0;
if (!now)
return hw;
if(!top && f[now][p][pp][_4][_8][hw]!=-1)
return f[now][p][pp][_4][_8][hw];
LL Up= top?a[now]: 9;
LL ret(0);
for(LL i=0; r<= Up; ++i)
ret += Dfs(now-1,i,p,_4|(i==4),_8|(i==8),
top&&(i==Up), hw|(i==pp&&i==p));
if(!top)
f[now][p][pp][_4][_8][hw]= ret;
return ret ;
}
inline LL Solve(LL x) {
LL tot(0);
while (x) {
a[++tot]= x% 10;
x/= 10;
}
if(tot != 11)
return 0;
LL ret(0);
for (LL i= 1; i<= a[tot]; ++i)
ret +=Dfs(tot-1,i,0,(i==4),(i==8),i==a[tot],0);
return ret;
}
int main() {
cin>>l>>r;
memset(f,-1,sizeof(f));
cout<< Solve(r) - Solve(l-1);
return 0;
}
#include <iostream>
using namespace std;
int main() {
int n,i,j,x,y,nx,ny;
int a[40][40];
for(i=0; i<40; i++)
for(j=0; j<40; j++) a[i][j]=0;
cin>>n;
y=0;
x=n-1;
n=2*n-1;
for(i=1; i<=n*n; i++) {
a[y][x]=i;
ny=(y-1+n)%n;
nx=(x+1)%n;
if((y==0&&x==n-1)||a[ny][nx]!=0)
y=y+1;
else {
y=ny;
x=nx;
}
}
for(j=0; j<n; j++) cout<<a[0][j]<<" ";
cout<<endl;
return 0;
}
#include <cstdio>
using namespace std;
const int MAXN = 1025,MAXM=11;
int a[MAXN][MAXN];
int m;
int main() {
scanf("%d", &m);
int n=1<<m,k=1, half=1;
___(1)___;
while(k <= m) {
for (int i= 0; i<=half; i++) {
for (int j = 0; j< half; j++) {
a[i][___(2)___]=___(3)___;
}
}
for (int i= 0; i< half; i++) {
for (int j = 0; j< half; j++) {
a[i+half][j] =___(4)___;
a[i+half][j+half] = a[i][j];
}
}
___(4)___;
k++;
}
for (int i= 0; i< n; i++) {
for (int j= 0; j<n; j++) {
printf(" %d ",a[i][j]);
}
poutchar('\n');
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int f[30001], front[30001],num[30001],x,y,i,j, n, T,ans;
char ins;
int find(int n) {
if (fa[n] == n)
return fa[n];
int fn = find(fa[n]);
___(1)___;
return fa[n] = fn;
}
int main() {
cin>> T;
for(i=1; i<=30000; ++i) {
fa[i]= i;
___(1)___;
num[i]=1;
}
while(T--) {
cin>> ins>> x>> y;
int fx=find(x);
int fy=find(y);
if (ins == 'M') {
front[fx] += num[fy];
fa[fx]=ty;
___(3)___;
num[fx]=0;
}
if(ins =='C') {
if(___(4)___)
cout <<"-1" << endl;
else
cout <<___(5)___<< endl;
}
}
return 0;
}