#include #include #include #include using namespace std; #define INF 2000000 const int N=60; struct Edge { int v,w; Edge *nxt; }memo[N*N],*cur,*adj[N]; int n,m,K,mask; int st[N],vis[N][1<<11]; int d[N][1<<11],dp[1<<11]; queueque; void addEdge(int u,int v,int w) { cur->v=v; cur->w=w; cur->nxt=adj[u]; adj[u]=cur++; } bool check(int s) { int res=0; for(int i=0;s;i++,s>>=1) res+=(s&1)*(inxt) { int v=it->v,w=it->w; if(d[v][s|st[v]]>d[u][s]+w) { d[v][s|st[v]]=d[u][s]+w; if((s|st[v])==s&&!vis[v][s]) que.push(v*10000+s),vis[v][s]=1; } } } } void init() { cur=memo; mask=(1<<(2*K))-1; memset(st,0,sizeof(st)); memset(vis,0,sizeof(vis)); memset(adj,0,sizeof(adj)); for(int i=1;i<=n;i++) for(int j=0;j<=mask;j++) d[i][j]=INF; } int main() { int t; scanf("%d",&t); while(t--) { int u,v,w; scanf("%d%d%d",&n,&m,&K); init(); for(int i=0;i=INF) puts("No solution"); else printf("%d\n",dp[mask]); } return 0; }