//hdu 2874
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn = 10005;
vector<int>G[maxn],V[maxn];
bool vis[maxn];
int pre[maxn][20];
long long dis[maxn][20];
int deep[maxn];
void dfs(int x,int fa,int de)
{
deep[x]=de;
vis[x]=1;
pre[x][0]=fa;
for(int i=0;i<G[x].size();++i)
if(G[x][i]!=fa)
{
dis[ G[x][i] ][0]=V[x][i];
dfs(G[x][i],x,de+1);
}
}
void init(int n)
{
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;++i)
if(!vis[i])
{
dis[i][0]=0;
dfs(i,0,1);
}
for(int k=1;k<20;++k)
{
for(int i=1;i<=n;++i)
if(pre[i][k-1]>0)
{
pre[i][k] = pre[ pre[i][k-1] ][k-1];
dis[i][k] = dis[i][k-1] + dis[ pre[i][k-1] ][k-1];
}
}
}
int main()
{
int n,m,q;
while(cin>>n>>m>>q)
{
memset(pre,-1,sizeof(pre));
memset(dis,0,sizeof(dis));
for(int i=0;i<=n;++i)G[i].clear(),V[i].clear();
for(int i=0;i<m;++i)
{
int u,v,w;
cin>>u>>v>>w;
G[u].push_back(v);
G[v].push_back(u);
V[u].push_back(w);
V[v].push_back(w);
}
init(n);
while(q--)
{
int u,v;
scanf("%d%d",&u,&v);
if(deep[v]>deep[u])swap(u,v);
int x=deep[u]-deep[v],num=0;
long long dd=0;
while(x)
{
if(x&1)
{
dd+=dis[u][num];
u=pre[u][num];
}
++num;
x>>=1;
}
if(u==v)
{
if(u>0)printf("%I64d\n",dd);
else printf("Not connected\n");
}
else
{
while(u!=v)
{
int j=0;
for(int i=0;i<20;++i)
if(pre[u][i]==pre[v][i])
{
j=i;
break;
}
if(j==0)
{
dd+=dis[u][j]+dis[v][j];
if(pre[u][j]>0)printf("%I64d\n",dd);
else printf("Not connected\n");
break;
}
dd+=dis[u][j-1]+dis[v][j-1];
u=pre[u][j-1];
v=pre[v][j-1];
}
}
}
}
return 0;
}