#include<iostream>
#include<set>
#include<vector>
using namespace std;
//定义全局变量
int n,m,k,e[300][300];
int ansid;//最短路径的查询编号
int ans=999999999;//最短路径初始化
void check(int index){
int sum=0;//路径总长度
int cnt;//当前路径包含的顶点数
int flag=1;//判断当前路径是否联通
cin>>cnt;
set<int>s;//用于记录路径中访问的不同顶点
vector<int>v(cnt);//存储路径中顶点的序列
//将顶点存入序列中
for(int i=0;i<cnt;i++){
cin>>v[i];
s.insert(v[i]);
}
//计算路径长度并存入集合
for(int i=0;i<cnt-1;i++){
//如果相邻节点之间没有边,则路径不连通
if(e[v[i]][v[i+1]]==0){
flag=0;
}
sum+=e[v[i]][v[i+1]];
}
//情况1:如果路径不连通
if(flag==0){
cout<<"Path "<<index<<": NA (Not a TS cycle)"<<endl;
}
//情况2:不是环或未访问所有顶点
else if(v[0]!=v[cnt-1]||s.size()!=n){
cout<<"Path "<<index<<": "<<sum<<" (Not a TS cycle)"<<endl;
}
//情况3:TS是环,但不是简单环
else if(cnt!=n+1){
cout << "Path " << index << ": " << sum << " (TS cycle)" << endl;
if(sum<ans){
ans=sum;
ansid=index;
}
}
//情况4:TS简单环
else{
cout << "Path " << index << ": " << sum << " (TS simple cycle)" << endl;
if(sum<ans){
ans=sum;
ansid=index;
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
int t1,t2,t;
cin>>t1>>t2>>t;
e[t1][t2]=e[t2][t1]=t;
}
cin>>k;
//逐条检查每条路径
for(int i=1;i<=k;i++){
check(i);
}
cout << "Shortest Dist(" << ansid << ") = " << ans << endl;
return 0;
}