#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int n;
struct node* next;
} node;
int * g[10005];
int t;
int visited[10005];
int col[10005];
int fin[10005];
int cur;
int flag;
int nd_count[10005];
void explore(int n){
visited[n] = 1;
col[n] = 1;
int i;
for( i = nd_count[n] -1; i >= 0; i--){
if (!visited[g[n][i]])
explore(g[n][i]);
if (col[g[n][i]] == 1){
// cout << "herE" << endl;
flag = 1;
}
if (flag)
return;
}
col[n] = 2;
fin[cur--] = n;
return;
}
int n;
void dfs(){
cur = n;
int i;
for(i = n ; i > 0; i--){
if (!visited[i])
explore(i);
if (flag)
return;
}
return;
}
int current_idx[10005];
int li_cnt[10005];
node* li[10005];
node comp[1000006];
int main()
{
int m;
int i;
for( i = 1; i <= m; i++){
int x,y;
comp[i].n = x;
comp[i].next = li[y];
li[y] = &comp[i];
nd_count[x]++;
}
for( i = 1; i <= n; i++)
g
[i
] = malloc(sizeof(int)*nd_count
[i
]);;
for( i = 1; i <= n; i++){
node * pt = li[i];
while (pt != 0){
g[pt->n][current_idx[pt->n]++] = i;
pt = pt->next;
}
}
dfs();
if (flag == 1){
return 0;
}
for( i = 1; i < n; i++)
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCgp0eXBlZGVmIHN0cnVjdCBub2RlewogICAgICAgIGludCBuOwogICAgICAgIHN0cnVjdCBub2RlKiBuZXh0Owp9IG5vZGU7CmludCAqIGdbMTAwMDVdOwppbnQgdDsKaW50IHZpc2l0ZWRbMTAwMDVdOwoKaW50IGNvbFsxMDAwNV07CmludCBmaW5bMTAwMDVdOwppbnQgY3VyOwppbnQgZmxhZzsKCmludCBuZF9jb3VudFsxMDAwNV07CnZvaWQgZXhwbG9yZShpbnQgbil7CgogICAgICAgIHZpc2l0ZWRbbl0gPSAxOwogICAgICAgIGNvbFtuXSA9IDE7CiAgICAgICAgaW50IGk7CiAgICAgICAgZm9yKCBpID0gbmRfY291bnRbbl0gLTE7IGkgPj0gMDsgaS0tKXsKICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZFtnW25dW2ldXSkKICAgICAgICAgICAgICAgICAgICAgICAgZXhwbG9yZShnW25dW2ldKTsKICAgICAgICAgICAgICAgIGlmIChjb2xbZ1tuXVtpXV0gPT0gMSl7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGNvdXQgPDwgImhlckUiIDw8IGVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGZsYWcpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29sW25dID0gMjsKCiAgICAgICAgCiAgICAgICAgZmluW2N1ci0tXSA9IG47CiAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgIAp9CmludCBuOwp2b2lkIGRmcygpewogICAgICAgIGN1ciA9IG47CiAgICAgICAgaW50IGk7CiAgICAgICAgZm9yKGkgPSBuIDsgaSA+IDA7IGktLSl7CiAgICAgICAgICAgICAgICBpZiAoIXZpc2l0ZWRbaV0pCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxvcmUoaSk7CiAgICAgICAgICAgICAgICBpZiAoZmxhZykKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICByZXR1cm47Cn0KaW50IGN1cnJlbnRfaWR4WzEwMDA1XTsKaW50IGxpX2NudFsxMDAwNV07Cm5vZGUqIGxpWzEwMDA1XTsKbm9kZSBjb21wWzEwMDAwMDZdOwogICAgICAgIAogICAgICAgIAppbnQgbWFpbigpCnsKICAgICAgICBpbnQgbTsKICAgICAgICBzY2FuZigiJWQgJWQiLCAmbiwgJm0pOwogICAgICAgIGludCBpOwogICAgICAgIGZvciggaSA9IDE7IGkgPD0gbTsgaSsrKXsKICAgICAgICAgICAgICAgIGludCB4LHk7CiAgICAgICAgICAgICAgICBzY2FuZigiJWQgJWQiLCAmeCwgJnkpOwogICAgICAgICAgICAgICAgY29tcFtpXS5uID0geDsKICAgICAgICAgICAgICAgIGNvbXBbaV0ubmV4dCA9IGxpW3ldOwogICAgICAgICAgICAgICAgbGlbeV0gPSAmY29tcFtpXTsKCiAgICAgICAgICAgICAgICBuZF9jb3VudFt4XSsrOwogICAgICAgIH0KICAgICAgICBmb3IoIGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICAgICAgICAgIGdbaV0gPSBtYWxsb2Moc2l6ZW9mKGludCkqbmRfY291bnRbaV0pOzsKICAgICAgICAgICAgICAgIAogICAgICAgIGZvciggaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICAgICAgICAgIG5vZGUgKiBwdCA9IGxpW2ldOwogICAgICAgICAgICAgICAgd2hpbGUgKHB0ICE9IDApewogICAgICAgICAgICAgICAgICAgICAgICBnW3B0LT5uXVtjdXJyZW50X2lkeFtwdC0+bl0rK10gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICBwdCA9IHB0LT5uZXh0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICBkZnMoKTsKICAgICAgICBpZiAoZmxhZyA9PSAxKXsKICAgICAgICAgICAgICAgIHByaW50ZigiU2FuZHJvIGZhaWxzLlxuIik7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIGZvciggaSA9IDE7IGkgPCBuOyBpKyspCiAgICAgICAgICAgICAgICBwcmludGYoIiVkICIsIGZpbltpXSk7CiAgICAgICAgcHJpbnRmKCIlZFxuIiwgZmluW25dKTsKICAgICAgICByZXR1cm4gMDsKfQogICAgICAgIAo=