1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 #define INF 0xffffff
5 #define maxn 105
6 using namespace std;
7 int f[maxn],ise[maxn],t,n,m;
8 typedef struct
9 {
10 int x,y,w;
11 }Edge;
12 Edge e[maxn];
13 int find(int x)
14 {
15 if(f[x]!=x)
16 f[x]=find(f[x]);
17 return f[x];
18 }
19 int cmp(Edge a,Edge b)
20 {
21 return a.w<b.w?1:0;
22 }
23 int kru()
24 {
25 int ans=0,id=0;
26 for(int i=1;i<=n;i++)
27 f[i]=i;
28 for(int i=1;i<=m;i++)
29 {
30 int f1=find(e[i].x);
31 int f2=find(e[i].y);
32 if(f1!=f2)
33 {
34 f[f1]=f2;
35 ans+=e[i].w;
36 ise[id++]=i;
37 }
38 }
39 return ans;
40 }
41 int kru1(int del)
42 {
43 int ans=0;
44 for(int i=1;i<=n;i++)
45 f[i]=i;
46 for(int i=1;i<=m;i++)
47 {
48 if(i==del)
49 continue;
50 int f1=find(e[i].x);
51 int f2=find(e[i].y);
52 if(f1!=f2)
53 {
54 f[f1]=f2;
55 ans+=e[i].w;
56 }
57 }
58 return ans;
59 }
60 int main()
61 {
62 //freopen("in.txt","r",stdin);
63 scanf("%d",&t);
64 while(t--)
65 {
66 scanf("%d%d",&n,&m);
67 for(int i=1;i<=m;i++)
68 scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].w);
69 sort(e+1,e+m+1,cmp);
70 int ans1=kru(),ans2=INF;
71 for(int i=1;i<n-1;i++)
72 {
73 int x=ise[i];
74 ans2=min(ans2,kru1(x));
75 }
76 printf("%d %d
",ans1,ans2);
77 }
78 return 0;
79 }