#include<bits/stdc++.h>
#define pb push_back
#define SZ(x) (int)((x).size())
template<typename _Tp>void read(_Tp &x){
	char ch=getchar();bool f=0;while(!isdigit(ch))f|=ch=='-',ch=getchar();
	x=ch&15,ch=getchar();while(isdigit(ch))x=x*10+(ch&15),ch=getchar();
	if(f)x=-x;
}
template<typename _Tp,typename ...Args>void read(_Tp &x,Args &...args){read(x),read(args...);}
template<typename _Tp>inline void chmin(_Tp &a,_Tp b){a=a<b?a:b;}
const int N=1280005,mod=998244353,inv2=(mod+1)/2;typedef std::pair<int,int> pi;
template<typename _Tp1,typename _Tp2>inline void add(_Tp1 &a,_Tp2 b){a=a+b>=mod?a+b-mod:a+b;}
template<typename _Tp1,typename _Tp2>inline void sub(_Tp1 &a,_Tp2 b){a=a<b?a+mod-b:a-b;}
std::vector<pi> G[N];int n,m,q,nc,Fa[N],W[N],cnt[N],val[N],s[N];
std::vector<int> e[N];int dfn[N],id;
void dfs1(int x,int fa){
	dfn[x]=++id;
	for(const auto &it:G[x]){
		int v=it.first,w=it.second;if(v==fa)continue;
		if(!dfn[v]){
			Fa[v]=x,W[v]=w,dfs1(v,x),s[x]+=s[v];
			if(s[v]==0)++nc,e[nc].pb(v),e[nc].pb(x),e[x].pb(nc),e[v].pb(nc),val[nc]=2*w,cnt[nc]=0;
		}
		else if(dfn[v]<dfn[x]){
			++nc,e[nc].pb(v),e[v].pb(nc),add(val[nc],w);
			for(int u=x;u!=v;u=Fa[u])e[nc].pb(u),e[u].pb(nc),add(val[nc],W[u]);
			cnt[nc]=1,++s[x],--s[v];
		}
	}
}
int anc[N][20],dep[N],ff[N];
void dfs2(int x,int fa){
	ff[x]=fa,dep[x]=dep[fa]+1,anc[x][0]=fa;for(int i=1;i<20;++i)anc[x][i]=anc[anc[x][i-1]][i-1];
	for(auto v:e[x])if(v!=fa)add(val[v],val[x]),cnt[v]+=cnt[x],dfs2(v,x);
}
int lca(int x,int y){
	if(dep[x]<dep[y])std::swap(x,y);
	for(int i=19;i>=0;--i)if(dep[anc[x][i]]>=dep[y])x=anc[x][i];
	if(x==y)return x;
	for(int i=19;i>=0;--i)if(anc[x][i]!=anc[y][i])x=anc[x][i],y=anc[y][i];
	return anc[x][0];
}
int pw[N];
int main(){
	freopen("simple.in","r",stdin);
	freopen("simple.out","w",stdout);
	pw[0]=1;for(int i=1;i<N;++i)pw[i]=2LL*pw[i-1]%mod;
	read(n,m,q),nc=n;
	for(int i=1,x,y,z;i<=m;++i)read(x,y,z),G[x].pb({y,z}),G[y].pb({x,z});
	dfs1(1,0),dfs2(1,0);
	while(q--){
		int x,y;read(x,y);int z=lca(x,y);
		int VAL=val[x];add(VAL,val[y]),sub(VAL,val[z]),sub(VAL,val[ff[z]]);
		int CNT=cnt[x]+cnt[y]-cnt[z]-cnt[ff[z]];
		printf("%lld\n",CNT==0?1LL*VAL*inv2%mod:1LL*VAL*pw[CNT-1]%mod);
	}
	return 0;
}
