1 #include<cstdio>
2 using namespace std;
3
4 const int maxn=55;
5 const int maxm=5000+10;
6
7 long long map[maxn][maxn],a[maxn][maxn],w[maxm];
8 int n,m,s,t,u[maxm],v[maxm];
9 long long ans;
10
11 void work()
12 {
13 int i,j;
14 for(i=1;i<=n;++i)
15 for(j=1;j<=n;++j)
16 a[i][j]=map[i][j];
17 }
18
19 long long f,aug,his[maxn];
20 int pre[maxn],vh[maxn],dis[maxn];
21
22 long long flow()
23 {
24 int i,j,temp,min;
25 bool flag=false;
26 f=0;
27 aug=2147000000;
28 vh[0]=n;
29 for(i=1;i<=n;++i)
30 vh[i]=0;
31 for(i=1;i<=n;++i)
32 dis[i]=0;
33 i=s;
34 while(dis[i]<n)
35 {
36 his[i]=aug;
37 flag=false;
38 for(j=1;j<=n;++j)
39 if(a[i][j]>0&dis[i]==dis[j]+1)
40 {
41 flag=true;
42 if(aug>a[i][j])aug=a[i][j];
43 pre[j]=i;
44 i=j;
45 if(i==t)
46 {
47 f+=aug;
48 while(i!=s)
49 {
50 temp=pre[i];
51 a[temp][i]-=aug;
52 a[i][temp]+=aug;
53 i=temp;
54 }
55 aug=2147000000;
56 }
57 break;
58 }
59 if(flag)continue;
60 min=n-1;
61 for(j=1;j<=n;++j)
62 if(a[i][j]>0&dis[j]<min)min=dis[j];
63 --vh[dis[i]];
64 if(vh[dis[i]]==0)break;
65 dis[i]=min+1;
66 ++vh[dis[i]];
67 if(i!=s)
68 {
69 i=pre[i];
70 aug=his[i];
71 }
72 }
73 return f;
74 }
75
76 int main()
77 {
78 int i,j;
79 scanf("%d%d%d%d",&n,&m,&s,&t);
80 for(i=1;i<=m;++i)
81 {
82 scanf("%d%d%lld",&u[i],&v[i],&w[i]);
83 w[i]=w[i]*(m+1)+1;
84 map[u[i]][v[i]]+=w[i];
85 }
86 work();
87 ans=flow();
88 printf("%lld %lld\n",ans/(m+1),ans%(m+1));
89 for(i=1;i<=m;++i)
90 {
91 work();
92 a[u[i]][v[i]]-=w[i];
93 if(flow()+w[i]==ans)
94 {
95 printf("%d\n",i);
96 map[u[i]][v[i]]-=w[i];
97 ans-=w[i];
98 }
99 }
100 return 0;
101 }