#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define eps 1e-9
#define LL long long
using namespace std;
#define int int
inline int Max(int a,int b) {return a>b?a:b;}
inline int Min(int a,int b) {return a<b?a:b;}
inline int Sqr(int a) {return a*a;}
inline int Abs(int a) {return a>0?a:-a;}
#undef int
#define MAXN 705
struct Edge{
int to,next;
}e[MAXN*5];int head[1505],cnt;
inline void Insert(int a,int b) {
e[++cnt].next=head[a];head[a]=cnt;e[cnt].to=b;
}
double v[MAXN][MAXN],r[1505],E[1505],dp[MAXN][MAXN];
int n,m,p,T;
void Dp(int v) {
E[v]=0;
for(int i=head[v];i;i=e[i].next) {
Dp(e[i].to);E[v]+=E[e[i].to];
}
if(r[v]) E[v]/=r[v];
E[v]++;
}
int main() {
scanf("%d",&T);
while(T--) {
memset(head,0,sizeof(head));cnt=0;
memset(r,0,sizeof(r));
scanf("%d%d%d",&n,&m,&p);p--;
for(int a,b,i=n+1;i<=m;i++) {
scanf("%d%d",&a,&b);
Insert(a,b);r[a]++;
}
for(int i=1;i<n;i++) r[i]++;
for(int i=1;i<=n;i++) {
E[i]=0;
for(int j=head[i];j;j=e[j].next) {
Dp(e[j].to);E[i]+=E[e[j].to];
}
}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++) {
if(i-j>16) break;
v[i][j]=E[j-1]+r[j-1]+r[j-1]*v[i][j-1];
}
for(int i=1;i<=n;i++) for(int j=0;j<=p;j++) dp[i][j]=1e20;
dp[n][0]=0;
for(int i=n;i;i--)
for(int j=1;j<=p;j++)
for(int k=i+1;k<=n;k++) {
if(k-i>16) break;
dp[i][j]=min(dp[i][j],v[i][k]+dp[k][j-1]);
}
printf("%.4lf\n",dp[1][p]);
}
return 0;
}