int initial_binser(int a[],int x,int p,int q,int min,int n) { int pos; if(a[0]<=x) pos=binser(a,1,min,x); else pos=binser(a,min+1,n,x); return pos; }
int binser(int a[],int p,int q,int x) { int mid; if(p > q) return -1; mid = (p+q)/2; if(x==a[mid]) return mid; else { if(x <= a[mid]) binser(a,p,mid-1,x); else binser(a,mid+1,q,x); } }
int main() { long i,j,sum,a,b,c,M; char s1[1000],s2[1000],str[1000]; while(scanf("%ld %ld",&N,&M)==2&&(N||M)) { getchar(); make_set(); for(i=0;i<N;i++) gets(name[i]); qsort(name,N,sizeof(name[0]),cmp); for(i=0;i<M;i++) { gets(str); sscanf(str,"%s %s %ld",s1,s2,&c); a=binser(s1); b=binser(s2); P[i].u=a;P[i].v=b;P[i].cost=c; } gets(str); qsort(P,M,sizeof(S),cmp1); j=0;sum=0; for(i=0;j<N-1&&i<M;i++) { a=find(P[i].u); b=find(P[i].v); if(a!=b) { j++; sum+=P[i].cost; link(a,b); } } if(j!=N-1) printf("Impossible\n"); else printf("%ld\n",sum); } return 0; }