#include #include #include using namespace std; const int N=5e3+5,NN=N*N; int n,e; int to[NN],ne[NN]; int h[N]; int dfn[N],low[N]; bool b[N]; int s[N];//stack int cnt; int tot,top; int id; int nid[N]; int now; bool no[N]; int ans[N]; int len; void add(int u,int v) { to[++cnt]=v; ne[cnt]=h[u]; h[u]=cnt; } void initialise(int n) { cnt=0; tot=0; top=0; id=0; len=0; memset(b,0,sizeof(bool)*(n+1)); memset(no,0,sizeof(bool)*(n+1)); memset(h,0,sizeof(int)*(n+1)); } void tarjan(int u) { // printf("%d ",u); int v; dfn[u]=++tot; low[u]=tot; s[++top]=u; b[u]=1; for(int i=h[u]; i; i=ne[i]) { v=to[i]; if(!dfn[v]) { tarjan(v); low[u]=low[u]