#include<bits/stdc++.h>usingnamespacestd;/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/constintinf=0x7f7f7f7f;constintN=105,M=1030;intn,m,k;intf[N][M];vector<pair<int,int>>v[N];/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/boolvis[N];voidspfa(intdep){queue<int>q;for(inti=1;i<=n;i++){vis[i]=0;if(f[i][dep]<inf)q.push(i);}while(!q.empty()){intx=q.front();q.pop();vis[x]=0;for(autoto:v[x]){inty=to.first,w=to.second;if(f[y][dep]>f[x][dep]+w){f[y][dep]=f[x][dep]+w;if(vis[y]==0){vis[y]=1;q.push(y);}}}}}/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/signedmain(){cin>>n>>m>>k;for(inti=1;i<=n;i++){for(intj=0;j<(1<<k);j++)f[i][j]=inf;}for(inti=1;i<=m;i++){intx,y,w;cin>>x>>y>>w;v[x].push_back({y,w});v[y].push_back({x,w});}for(inti=1;i<=k;i++){intx;cin>>x;f[x][(1<<(i-1))]=0;}for(inti=1;i<(1<<k);i++){for(intj=(i&(i-1));j;j=(i&(j-1))){if(j>(i^j))continue;for(intu=1;u<=n;u++)f[u][i]=min(f[u][i],f[u][j]+f[u][i^j]);}spfa(i);}intans=inf;for(inti=1;i<=n;i++)ans=min(ans,f[i][(1<<k)-1]);cout<<ans<<'\n';return0;}
#include<bits/stdc++.h>#define int long long#define PII pair<int,int>usingnamespacestd;/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/constintinf=0x7f7f7f7f;constintN=105;intn,m,k;inta[15][15];intf[N][1030];PIIpre[N][1030];constintdx[N]={0,0,-1,1};constintdy[N]={-1,1,0,0};/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/#define pos(x,y) (((x)-1)*m+(y))#define sop(x) (pair<int,int>((x-1)/m+1,(x-1)%m+1))boolvis[N];voidspfa(intdep){queue<PII>q;for(inti=1;i<=n*m;i++){vis[i]=0;if(f[i][dep]<inf)q.push(sop(i));}while(!q.empty()){intx=q.front().first,y=q.front().second;q.pop();vis[pos(x,y)]=0;for(inti=0;i<4;i++){intnx=x+dx[i],ny=y+dy[i],w=a[nx][ny];if(nx<1||ny<1||nx>n||ny>m)continue;if(f[pos(nx,ny)][dep]>f[pos(x,y)][dep]+w){f[pos(nx,ny)][dep]=f[pos(x,y)][dep]+w;if(vis[pos(nx,ny)]==0){vis[pos(nx,ny)]=1;q.push({nx,ny});}pre[pos(nx,ny)][dep]=make_pair(pos(x,y),dep);}}}}intans[N];voidGet_ans(intx,inty){if(!pre[x][y].first)return;ans[x]=1;if(pre[x][y].first==x){Get_ans(x,y^pre[x][y].second);}Get_ans(pre[x][y].first,pre[x][y].second);}/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/signedmain(){cin>>n>>m;for(inti=1;i<=n*m;i++){for(intj=0;j<=1025;j++)f[i][j]=inf;}intrt=-1;for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){cin>>a[i][j];if(a[i][j]==0){k++,rt=pos(i,j);f[pos(i,j)][1<<(k-1)]=0;}}}if(!k){cout<<0<<'\n';for(inti=1;i<=n;i++){for(intj=1;j<=m;j++)cout<<"_";cout<<'\n';}return0;}for(inti=1;i<(1<<k);i++){for(intj=(i&(i-1));j;j=(i&(j-1))){if(j>(i^j))continue;for(intu=1;u<=n*m;u++){intx=sop(u).first,y=sop(u).second;if(f[u][i]>f[u][j]+f[u][i^j]-a[x][y]){f[u][i]=f[u][j]+f[u][i^j]-a[x][y];pre[u][i]=make_pair(u,j);}}}spfa(i);}cout<<f[rt][(1<<k)-1]<<'\n';Get_ans(rt,(1<<k)-1);for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){if(a[i][j]==0)cout<<'x';elseif(ans[pos(i,j)]==1)cout<<'o';elsecout<<'_';}cout<<'\n';}return0;}