P2984
#include<bits/stdc++.h>
#define ll long long
const int MAX=5e4+10;
using namespace std;
inline ll read()
{
char qwqc=getchar();ll qwqf=1,qwqx=0;
while(qwqc<'0'||qwqc>'9'){if(qwqc=='-') qwqf=-1;qwqc=getchar();}
while(qwqc>='0'&&qwqc<='9'){qwqx=(qwqx<<3)+(qwqx<<1)+(qwqc^48);qwqc=getchar();}
return qwqf*qwqx;
}
inline void write(ll x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
struct edge
{
int u,v,w;
};
struct node
{
int ni,w;
bool operator < (const node &xx)const
{
return xx.w<w;
}
};
int n,m,b;
vector<int> s[MAX];
vector<edge> eg;
priority_queue<node> q;
int dis[MAX],vis[MAX];
void dij(int ss)
{
dis[ss]=0;
q.push((node){1,0});
while(!q.empty())
{
node ff=q.top();
q.pop();
int vv=ff.ni,ww=ff.w;
if(vis[vv]) continue;
vis[vv]=1;
for(int i=0,siz=s[vv].size();i<siz;i++)
{
int sv=eg[s[vv][i]].v;
if(dis[vv]+ww<dis[sv])
{
dis[sv]=dis[vv]+ww;
q.push((node){sv,ww});
}
}
for(int i=0;i<m;i++) cout<<dis[i]<<" ";
cout<<endl;
}
}
int main()
{
n=read();m=read();b=read();
memset(dis,10,sizeof(dis));
for(int i=0;i<m;i++)
{
int u=read(),v=read(),w=read();
s[u].push_back(i);
eg.push_back((edge){u,v,w});
s[v].push_back(i);
}
dij(1);
for(int i=1;i<=b;i++)
{
int p=read(),qq=read();
write(dis[p]+dis[qq]);
putchar('\n');
}
return 0;
}