模板##
int ISAP(int s,int t,int n){
for(int i=0;i<=n;i++) cur[i]=h[i],d[i]=INF;
queue<int>q;
q.push(t);
d[t]=0;
int flow=0;
while(!q.emtpy()){
int u=q.top();q.pop();
for(int i=h[u];~i;i=e[i].xt)
if(d[e[i].t]==INF) num[d[e[i].t]=d[u]+1]++,q.push(e[i].t);
}
for(int x=s,ok=0;d[s]<n;ok=0){
if(x==t){
int a=INF;
for(;x!=s;x=e[p[x]].f)
a=min(a,e[p[x]].capa-e[p[x]].flow);
for(x=t,flow+=a;x!=s;x=e[p[x]].f)
e[p[x]].flow+=a,e[p[x]^1].flow-=a;
}
for(int i=cur[x];~i;i=e[i].xt)
if(e[i].capa>e[i].flow&&d[e[i].t]==d[u]-1){
ok=1;
cur[x]=i;
p[x=e[i].t]=i;
break;
}
if(!ok){
int m=n-1;
for(int i=cur[x]=h[x];~i;i=e[i].xt)
if(e[i].capa>e[i].flow) m=min(m,d[e[i].t]);
if(--num[d[x]]==0) break;
num[d[x]=m+1]++
if(x!=s) x=e[p[x]].f;
}
}
return flow;
}