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;
}