#include<bits/stdc++.h>
using namespace std;
const long long inf = 0x3f3f3f3f3f3f3f3f;
long long n,m,q,x,y,z;
long long dis[100001],vis[100001];
long long head[400001],tot;
struct Edge{
long long to,nxt,w;
}e[400001];
priority_queue <pair<long long,long long> > p;
void add(long long u,long long v,long long w){
e[++tot].to=v;
e[tot].w=w;
e[tot].nxt=head[u];
head[u]=tot;
}
void d(long long x){
dis[x]=0;
p.push({0,x});
while(!p.empty()){
long long u=p.top().second;p.pop();
if(vis[u]) continue;
vis[u]=1;
for(long long i=head[u];i;i=e[i].nxt){
long long v=e[i].to;
if(dis[u]^e[i].w<dis[v]){
dis[v]=dis[u]^e[i].w;
p.push({-1*dis[v],v});
}
}
}
}
int main(){
scanf("%lld%lld%lld",&n,&m,&q);
for(long long i=1;i<=n;++i){vis[i]=0;dis[i]=inf;}
for(long long i=1;i<=m;i++){
scanf("%lld%lld%lld",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
d(1);
while(q--){
scanf("%lld%lld",&x,&y);
cout<<(dis[y]^dis[x])<<endl;
}
return 0;
}