int n; // 结点个数
int size; // 边的数量
int pre[VN]; // 权值最小的前驱边
int id[VN];
int vis[VN]; // 是在环中还是在环外
};
Directed_MST
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
G.init(n+1);
int Max = 0;
for(int i=0; i
int c;
scanf("%d%d%d",&a,&b,&c);
if(a==b)continue;
G.insert(a+1,b+1,c);
}
++Max;
// 把n+1设置为虚拟根结点
for(int i=m; i
// 到达1,2,...,n.利用这个关系,当i>m时利用位置就可以确定m+1与其它结点的关系
// 后面要用这个关系输出根结点
}
int ans = G.directed_mst(n+1);
if(ans==-1 || ans-Max>=Max)puts("impossible");
else printf("%d %d\n", ans-Max, ans_root-m);
puts("");
}
return 0;
}