Language: C++

//???????????????????????¨??????????????????A????????????B????????£?????¨??????A -> B??¨?????????????????????
//????????¨???????????°???????????§???????????°???????????§s??????t????????????????????¨????????¨??????
//????????????????????????s -> s1 -> s2 -> ??? -> t??¨???????????¨?????§?????????????????¨???????????????s < s1 < s2 < ??? < t??¨?????????
//s-t??????????????????L?????£?????¨??????t????????? >= s????????? + L??§???????????¨????¢??????????????????????s??????t?????????????????????ML??¨????????°???
//t????????? >= s????????? + ML?????¨???????????????????????\????????????????????????1?????\?????§?????????????????????1????????????????§?????????????
//?????????t???????????????t????????? = s????????? + ML??¨?????????????????????
//?????±????¨????????????????????????´????????????????????±????±????????????¨?????§??????????????±????±?????????°????????????????????????
//??¨?????????????????±2????????????????????????????????????????????§???1????????????1???k????????´?????????????????????????\?????????????
//??????????????????1?????????????????????{1, 2, 4}?????£?????¨???????????????3?????????????????????????????£???????????????????????????
//
//????????¨????????°?????¨???????????????????????????????????????????????°???????????°?????\??????????????????????????°??§????????????
//????????????????????¨????????¨??????????????????????????????????????°???????????????DAG????????????DAG?????§??????????????????????§£??????????°????????????§?????????????????????
//???????????????????????????????????°?????????????????????????????§????????¢???????????????????????????????????????????????¨????????????
//??¶?????????????????????, 1?????????????????¢)??§?????????????????????????????§??????????????§???BFS??§??????
//????£?????????????????????????0???n-1????????????????????????
//
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
typedef pair<int, int> P;

bool table[5000][5000] = {false};
int dp[5000];	//dp[i] = ?????????i(>=0)?????????

int n, m;
queue<P> que;

void bfs(){
	while( !que.empty() ){
		int dist = que.front().first;
		int team = que.front().second;
		que.pop();
		if( dp[team] >= dist )
			continue;
		
		dp[team] = dist;
		
		for( int i = 0; i < n; i++ ){
			if( table[team][i] )
				que.push(P(dist + 1, i));
		}
	}
}

int main()
{
	int i, j;
	
	cin >> n >> m;
	for( i = 0; i < m; i++ ){
		int s, t;
		cin >> s >> t;
		table[s-1][t-1] = true;
	}
	
	for( i = 0; i < n; i++ ){
		for( j = 0; j < n; j++ )
			if( table[j][i] ) break;
		if( j == n ){	//i?????\???????????????
			que.push(P(1, i));	//?§?????????????(dp[i]???????????????0????????§??£?????°????????????????????????)
		}
	}
	bfs();	//???????????¢?´¢??§dp??¨????????????
	
	static P perm[5000];	//perm[i] = (??????dp[i], ???????????????i)
	for( i = 0; i < n; i++ )
		perm[i] = P(dp[i], i);
	sort(perm, perm + n);	//????????§?????????
	
	bool flag = false;
	for( i = 0; i < n; i++ ){
		cout << perm[i].second + 1 << endl;
		if( i + 1 < n && perm[i].first == perm[i+1].first ){
			flag = true;
		}
	}
	if( flag ) cout << 1 << endl;
	else cout << 0 << endl;
	return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:69:9: error: 'sort' was not declared in this scope; did you mean 'short'?
   69 |         sort(perm, perm + n);   //????????§?????????
      |         ^~~~
      |         short