int main() { int i,j,count; while(scanf("%d",&n) != EOF) { fun(); Dinic flow; for(i=1 ; i <= n ; ++i){ if(dp[i]==1) flow.insert(0,i,1); if(dp[i]==len) flow.insert(i,n+1,1); for(j=i+1 ; j <= n ; ++j) if(a[j] > a[i]) flow.insert(i,j,1); } printf("%d\n%d\n",len,flow.MaxFlow(0,n+1)); } return 0; }
int main(){ int n,m,a,b,s,t; while( scanf("%d%d", &n, &m) != EOF ){ Dinic mf; for(int i=0 ; i < m ; ++i){ scanf("%d%d", &a, &b); mf.insert( a, b, 1 ); } scanf("%d%d", &s, &t); printf("%d\n", mf.MaxFlow(s,t)); CLR( ans, 0 ); int cnt = 0; for(int i=0 ; i < mf.end ; ++i) if( net[i].val > 1 ) if( i%2 == 0 ) ans[cnt++] = i/2+1; printf("%d\n", cnt); for(int i=0 ; i < cnt ; ++i) printf("%d\n", ans[i]); } return 0; }