#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
typedef struct Node {
int v;
struct Node* next;
} Node;
Node* adj[MAX];
int visited[MAX], recStack[MAX];
int n;
void addEdge(int u, int v) {
Node
* temp
= (Node
*)malloc(sizeof(Node
)); temp->v = v;
temp->next = adj[u];
adj[u] = temp;
}
int dfs(int v) {
visited[v] = 1;
recStack[v] = 1;
for (Node* temp = adj[v]; temp != NULL; temp = temp->next) {
int u = temp->v;
if (!visited[u] && dfs(u))
return 1;
else if (recStack[u])
return 1;
}
recStack[v] = 0;
return 0;
}
int main() {
int m, u, v;
for (int i = 0; i < n; i++) adj[i] = NULL;
for (int i = 0; i < m; i++) {
if (u >= 0 && u < n && v >= 0 && v < n)
addEdge(u, v);
}
for (int i = 0; i < n; i++) {
if (!visited[i] && dfs(i)) {
return 0;
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgTUFYIDEwMDAKCnR5cGVkZWYgc3RydWN0IE5vZGUgewogICAgaW50IHY7CiAgICBzdHJ1Y3QgTm9kZSogbmV4dDsKfSBOb2RlOwoKTm9kZSogYWRqW01BWF07CmludCB2aXNpdGVkW01BWF0sIHJlY1N0YWNrW01BWF07CmludCBuOwoKdm9pZCBhZGRFZGdlKGludCB1LCBpbnQgdikgewogICAgTm9kZSogdGVtcCA9IChOb2RlKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKICAgIHRlbXAtPnYgPSB2OwogICAgdGVtcC0+bmV4dCA9IGFkalt1XTsKICAgIGFkalt1XSA9IHRlbXA7Cn0KCmludCBkZnMoaW50IHYpIHsKICAgIHZpc2l0ZWRbdl0gPSAxOwogICAgcmVjU3RhY2tbdl0gPSAxOwoKICAgIGZvciAoTm9kZSogdGVtcCA9IGFkalt2XTsgdGVtcCAhPSBOVUxMOyB0ZW1wID0gdGVtcC0+bmV4dCkgewogICAgICAgIGludCB1ID0gdGVtcC0+djsKCiAgICAgICAgaWYgKCF2aXNpdGVkW3VdICYmIGRmcyh1KSkKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgZWxzZSBpZiAocmVjU3RhY2tbdV0pCiAgICAgICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHJlY1N0YWNrW3ZdID0gMDsKICAgIHJldHVybiAwOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBtLCB1LCB2OwogICAgc2NhbmYoIiVkICVkIiwgJm4sICZtKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgYWRqW2ldID0gTlVMTDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgIHNjYW5mKCIlZCAlZCIsICZ1LCAmdik7CiAgICAgICAgaWYgKHUgPj0gMCAmJiB1IDwgbiAmJiB2ID49IDAgJiYgdiA8IG4pCiAgICAgICAgICAgIGFkZEVkZ2UodSwgdik7CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBpZiAoIXZpc2l0ZWRbaV0gJiYgZGZzKGkpKSB7CiAgICAgICAgICAgIHByaW50ZigiWUVTXG4iKTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQoKICAgIHByaW50ZigiTk9cbiIpOwogICAgcmV0dXJuIDA7Cn0=