# include <iostream>
# include <stdio.h>
# include <algorithm>
# include <queue>
# include <set>
# include <string.h>
# include <vector>
# include <fstream>
# include <math.h>
# include <sstream>
# include <stack>
# define for1(i,k,n) for(long long i=k;i<n;i++)
# define for2(i,k,n) for(long long i=k;i<=n;i++)
# define Min(x,y) ((x)<(y)?(x):(y))
# define Max(x,y) ((x)>(y)?(x):(y))
# define INF (long long int ) 1e15
# define ALL(x) (begin(x),end(x))
# define Abs(x) (x>=0?x:-x)
using namespace std;
typedef long long int ll;
ll time1;
vector < vector< ll> > g;
vector <ll> status;
vector <ll> parent;
vector<ll> child;
vector <bool> check;
vector <ll> low;
vector <ll> in;
void dfs (ll x)
{
if (status[x]!=0) // so that visited verices are not visited again
return;
ll y; ++time1;// time1 is the dfs number
in[x]=time1;// in refers to initial or the time of discovery
low[x]=time1;// low refers to the minimum dfs no that can be acessed by the subtree rooted at x
status[x]=1;// status [x]=1 since it is benig processesd
for1(i,0,g[x].size()) // a loop to acess all its neighbours
{
y=g[x][i]; // one neighbour
if (status[y]==0)
{// a dfs only if it is undiscovered
parent[y]=x;// stores the parent of y that is x
++child[x];//updates the no of children of x
dfs(y);
low[x]=Min(low[x],low[y]);// checks for Minimum dfs no that can be acessed by tree at x this is a recursive function
if ((parent[x]==-1)&&(child[x]>1)) // initilaised parent of all to be -1 so check if x is a root
check[x]=true;
if ((parent[x]!=-1)&&(low[y]>=low[x]))// checks if a non root is an articulation point
check[x]=true;
}
else if (y!=parent[x])
{
low[x]=Min(low[x],low[y]); // continuation of minimum
}
}
status[x]=2;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
std::ios_base::sync_with_stdio (false);
ll i,j,k,x,y,l,n,m,t,sum1;
cin>>t;
while(t--)
{
cin>>n>>m>>k;
sum1=0; time1=0;
g.clear();//g stores edges
in.clear();//initial time of discovery
low.clear();// minimum dfs no acessed by the tree rooted
parent.clear();// stores the parent of a vertice
child.clear();// stores the no of children of a vertic
check.clear();//boolean to store if it is an articulation point
status.clear();// to store the condition discovered,undiscovered,processed with undiscovered=0,processed=1,finished=2
g.resize(n);
status.resize(n);
in.resize(n);// resizing all of them to n since there are n vertice
low.resize(n);
parent.resize(n);
child.resize(n);
check.resize(n);
fill(parent.begin(),parent.end(),-1);// filling by default for parent to be -1
fill(child.begin(),child.end(),0);// children count =0 for all
fill(check.begin(),check.end(),0);// check =0 or false for all since no art. pnt
fill(status.begin(),status.end(),0);// status=0,or undsicovered
for1(i,0,m)
{
cin>>x>>y;
g[x].push_back(y);// since undirecred grph x-y =y-x
g[y].push_back(x);
}
for1(i,0,n)
{
if (status[i]==0)
dfs(i); // dfs for all vertices that are undicovered
}
for1(i,0,n)
{
if (check[i])
++sum1;// if check is true then art. pnt.
}
ll f=sum1*k; //final answer
cout<<f<<endl;
}
return 0;
}
IyBpbmNsdWRlIDxpb3N0cmVhbT4KIyBpbmNsdWRlIDxzdGRpby5oPgojIGluY2x1ZGUgPGFsZ29yaXRobT4KIyBpbmNsdWRlIDxxdWV1ZT4KIyBpbmNsdWRlIDxzZXQ+CiMgaW5jbHVkZSA8c3RyaW5nLmg+CiMgaW5jbHVkZSA8dmVjdG9yPgojIGluY2x1ZGUgPGZzdHJlYW0+CiMgaW5jbHVkZSA8bWF0aC5oPgojIGluY2x1ZGUgPHNzdHJlYW0+CiMgaW5jbHVkZSA8c3RhY2s+CiAKIyBkZWZpbmUgZm9yMShpLGssbikgICAgICAgICAgICAgIGZvcihsb25nIGxvbmcgaT1rO2k8bjtpKyspCiMgZGVmaW5lIGZvcjIoaSxrLG4pICAgICAgICAgICAgICBmb3IobG9uZyBsb25nIGk9aztpPD1uO2krKykKIyBkZWZpbmUgTWluKHgseSkgICAgICAgICAgICAgICAgICAgKCh4KTwoeSk/KHgpOih5KSkKIyBkZWZpbmUgTWF4KHgseSkgICAgICAgICAgICAgICAgICAgKCh4KT4oeSk/KHgpOih5KSkKIyBkZWZpbmUgSU5GIChsb25nIGxvbmcgaW50ICkgMWUxNQojIGRlZmluZSBBTEwoeCkgICAgICAgICAgICAgICAgICAoYmVnaW4oeCksZW5kKHgpKQojIGRlZmluZSBBYnMoeCkgICAgICAgICAgICAgICAgICh4Pj0wP3g6LXgpCiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgaW50ICBsbDsKbGwgIHRpbWUxOwp2ZWN0b3IgPCB2ZWN0b3I8IGxsPiA+IGc7CnZlY3RvciA8bGw+IHN0YXR1czsKdmVjdG9yIDxsbD4gcGFyZW50Owp2ZWN0b3I8bGw+IGNoaWxkOwp2ZWN0b3IgPGJvb2w+IGNoZWNrOwp2ZWN0b3IgPGxsPiBsb3c7CnZlY3RvciA8bGw+IGluOwp2b2lkIGRmcyAobGwgeCkKewogICAgaWYgKHN0YXR1c1t4XSE9MCkgLy8gc28gdGhhdCB2aXNpdGVkIHZlcmljZXMgYXJlIG5vdCB2aXNpdGVkIGFnYWluCiAgICAgICAgcmV0dXJuOwogICBsbCB5OyAgKyt0aW1lMTsvLyB0aW1lMSBpcyB0aGUgZGZzIG51bWJlcgogICAgaW5beF09dGltZTE7Ly8gaW4gcmVmZXJzIHRvIGluaXRpYWwgb3IgdGhlIHRpbWUgb2YgZGlzY292ZXJ5CiAgICBsb3dbeF09dGltZTE7Ly8gbG93IHJlZmVycyB0byB0aGUgbWluaW11bSBkZnMgbm8gdGhhdCBjYW4gYmUgYWNlc3NlZCBieSB0aGUgc3VidHJlZSByb290ZWQgYXQgeAogICAgc3RhdHVzW3hdPTE7Ly8gc3RhdHVzIFt4XT0xIHNpbmNlIGl0IGlzIGJlbmlnIHByb2Nlc3Nlc2QKICAgIGZvcjEoaSwwLGdbeF0uc2l6ZSgpKSAgLy8gYSBsb29wIHRvIGFjZXNzIGFsbCBpdHMgbmVpZ2hib3VycwogICAgewp5PWdbeF1baV07ICAvLyBvbmUgbmVpZ2hib3VyCmlmIChzdGF0dXNbeV09PTApCnsvLyBhIGRmcyBvbmx5IGlmIGl0IGlzIHVuZGlzY292ZXJlZAogICAgcGFyZW50W3ldPXg7Ly8gc3RvcmVzIHRoZSBwYXJlbnQgb2YgeSB0aGF0IGlzIHgKICAgICsrY2hpbGRbeF07Ly91cGRhdGVzIHRoZSBubyBvZiBjaGlsZHJlbiBvZiB4CiAgICBkZnMoeSk7CiAgICBsb3dbeF09TWluKGxvd1t4XSxsb3dbeV0pOy8vIGNoZWNrcyBmb3IgTWluaW11bSBkZnMgbm8gdGhhdCBjYW4gYmUgYWNlc3NlZCBieSB0cmVlIGF0IHggdGhpcyBpcyAgYSByZWN1cnNpdmUgZnVuY3Rpb24KICAgIGlmICgocGFyZW50W3hdPT0tMSkmJihjaGlsZFt4XT4xKSkgIC8vIGluaXRpbGFpc2VkIHBhcmVudCBvZiBhbGwgdG8gYmUgLTEgc28gY2hlY2sgaWYgeCBpcyBhIHJvb3QKICAgICAgICBjaGVja1t4XT10cnVlOwogICAgaWYgKChwYXJlbnRbeF0hPS0xKSYmKGxvd1t5XT49bG93W3hdKSkvLyBjaGVja3MgaWYgYSBub24gcm9vdCBpcyBhbiBhcnRpY3VsYXRpb24gcG9pbnQKICAgICAgICBjaGVja1t4XT10cnVlOwp9CmVsc2UgaWYgKHkhPXBhcmVudFt4XSkKewogICAgbG93W3hdPU1pbihsb3dbeF0sbG93W3ldKTsgIC8vIGNvbnRpbnVhdGlvbiBvZiBtaW5pbXVtCn0KIAogCiAgICB9CiAgICBzdGF0dXNbeF09MjsKfQogCiAKIAogCiAKIAogCiBpbnQgIG1haW4oKQp7CiAjaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW4udHh0IiwgInIiLCBzdGRpbik7CiNlbmRpZgogICAgc3RkOjppb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvIChmYWxzZSk7CiAKICAgIGxsIGksaixrLHgseSxsLG4sbSx0LHN1bTE7CmNpbj4+dDsKd2hpbGUodC0tKQp7CiAgICBjaW4+Pm4+Pm0+Pms7CiAgICBzdW0xPTA7IHRpbWUxPTA7CmcuY2xlYXIoKTsvL2cgc3RvcmVzIGVkZ2VzCmluLmNsZWFyKCk7Ly9pbml0aWFsIHRpbWUgb2YgZGlzY292ZXJ5Cmxvdy5jbGVhcigpOy8vIG1pbmltdW0gZGZzIG5vIGFjZXNzZWQgYnkgdGhlIHRyZWUgcm9vdGVkCnBhcmVudC5jbGVhcigpOy8vIHN0b3JlcyB0aGUgcGFyZW50IG9mIGEgdmVydGljZQpjaGlsZC5jbGVhcigpOy8vIHN0b3JlcyB0aGUgbm8gb2YgY2hpbGRyZW4gb2YgYSB2ZXJ0aWMKY2hlY2suY2xlYXIoKTsvL2Jvb2xlYW4gdG8gc3RvcmUgaWYgaXQgaXMgYW4gYXJ0aWN1bGF0aW9uIHBvaW50CnN0YXR1cy5jbGVhcigpOy8vIHRvIHN0b3JlIHRoZSBjb25kaXRpb24gZGlzY292ZXJlZCx1bmRpc2NvdmVyZWQscHJvY2Vzc2VkIHdpdGggdW5kaXNjb3ZlcmVkPTAscHJvY2Vzc2VkPTEsZmluaXNoZWQ9MgpnLnJlc2l6ZShuKTsKc3RhdHVzLnJlc2l6ZShuKTsKaW4ucmVzaXplKG4pOy8vIHJlc2l6aW5nIGFsbCBvZiB0aGVtIHRvIG4gc2luY2UgdGhlcmUgYXJlIG4gdmVydGljZQpsb3cucmVzaXplKG4pOwpwYXJlbnQucmVzaXplKG4pOwpjaGlsZC5yZXNpemUobik7CmNoZWNrLnJlc2l6ZShuKTsKIApmaWxsKHBhcmVudC5iZWdpbigpLHBhcmVudC5lbmQoKSwtMSk7Ly8gZmlsbGluZyBieSBkZWZhdWx0IGZvciBwYXJlbnQgdG8gYmUgLTEKZmlsbChjaGlsZC5iZWdpbigpLGNoaWxkLmVuZCgpLDApOy8vIGNoaWxkcmVuIGNvdW50ID0wIGZvciBhbGwKZmlsbChjaGVjay5iZWdpbigpLGNoZWNrLmVuZCgpLDApOy8vIGNoZWNrID0wIG9yIGZhbHNlIGZvciBhbGwgc2luY2Ugbm8gYXJ0LiBwbnQKZmlsbChzdGF0dXMuYmVnaW4oKSxzdGF0dXMuZW5kKCksMCk7Ly8gc3RhdHVzPTAsb3IgdW5kc2ljb3ZlcmVkCiAKZm9yMShpLDAsbSkKewogICAgY2luPj54Pj55OwogICAgZ1t4XS5wdXNoX2JhY2soeSk7Ly8gc2luY2UgdW5kaXJlY3JlZCBncnBoIHgteSA9eS14CiAgICBnW3ldLnB1c2hfYmFjayh4KTsKfQpmb3IxKGksMCxuKQp7CiAgICBpZiAoc3RhdHVzW2ldPT0wKQogICAgICAgIGRmcyhpKTsgIC8vIGRmcyBmb3IgYWxsIHZlcnRpY2VzIHRoYXQgYXJlIHVuZGljb3ZlcmVkCn0KZm9yMShpLDAsbikKewogICAgaWYgKGNoZWNrW2ldKQogICAgICAgICsrc3VtMTsvLyBpZiBjaGVjayBpcyB0cnVlIHRoZW4gYXJ0LiBwbnQuCn0KbGwgZj1zdW0xKms7IC8vZmluYWwgYW5zd2VyCmNvdXQ8PGY8PGVuZGw7Cn0KcmV0dXJuIDA7Cn0g