#include<bits/stdc++.h> usingnamespace std; int t,n,m,x,y,z,d[20][20][2],dp[1<<12][14][14][2],f[1<<12]; intmain(){ scanf("%d",&t); for (int ii=1;ii<=t;ii++) { memset(d,0x2f,sizeof(d)); memset(dp,0x2f,sizeof(dp)); memset(f,0x2f,sizeof(f)); scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); x--,y--; if (z<d[x][y][0]) {d[x][y][1]=d[x][y][0],d[x][y][0]=z;} elseif (z<d[x][y][1]) {d[x][y][1]=z;} swap(x,y); if (z<d[x][y][0]) {d[x][y][1]=d[x][y][0],d[x][y][0]=z;} elseif (z<d[x][y][1]) {d[x][y][1]=z;} } for (int i=0;i<n;i++) {f[1<<i]=0;} for (int i=1;i<(1<<n);i++) { for (int j=0;j<n;j++) { if (!(i&(1<<j))) {continue;} for (int k=0;k<n;k++) { if (!(i&(1<<k))) {continue;} f[i]=min(f[i],dp[i][j][k][1]+d[j][k][0]); } } if (f[i]<0x2f2f2f2f) { for (int j=0;j<n;j++) { if (i&(1<<j)) {continue;} for (int k=0;k<n;k++) { if (!(i&(1<<k))) {continue;} f[i|(1<<j)]=min(f[i|(1<<j)],f[i]+d[j][k][0]+d[j][k][1]); } } for (int j=0;j<n;j++) { if (!(i&(1<<j))) {continue;} for (int k=0;k<n;k++) { if (!(i&(1<<k))) {continue;} for (int l=0;l<n;l++) { if (i&(1<<l)) {continue;} dp[i|(1<<l)][l][k][0]=min(dp[i|(1<<l)][l][k][0],f[i]+d[j][l][0]); if (j!=k) {f[i|(1<<l)]=min(f[i|(1<<l)],f[i]+d[j][l][0]+d[k][l][0]);} } } } } for (int j=0;j<n;j++) { if (!(i&(1<<j))) {continue;} for (int k=0;k<n;k++) { if (!(i&(1<<k))) {continue;} if (min(dp[i][j][k][0],dp[i][j][k][1])==0x2f2f2f2f) {continue;} for (int l=0;l<n;l++) { if (i&(1<<l)) {continue;} dp[i|(1<<l)][l][k][1]=min(dp[i|(1<<l)][l][k][1], min(dp[i][j][k][0],dp[i][j][k][1])+d[j][l][0]); } } } } if (f[(1<<n)-1]==0x2f2f2f2f) {printf("impossible\n");} else {printf("%d\n",f[(1<<n)-1]);} } return0; }