#include<iostream>
#include<vector>
#include<queue>
using namespace std;
vector<int>gr[500000];
queue<int> q;
int isprime(int x)
{
int i,f=1;
if(x==2||x==3)
return 1;
for(i=2;i*i<=x;i++)
{
if(x%i==0)
{
f=0;
break;
}
}
return f;
}
int dist[500001];
int main()
{
int e,i,v,d=0,x,y,ele,j,p=0;
double ans,n,cnt=0;
cin>>n;
int tot= n*(n-1);
tot/=2;
for(i=0;i<n;i++)
{
gr[i].clear();
dist[i]=0;
}
for(e=0;e<n-1;e++)
{
cin>>x>>y;
gr[x-1].push_back(y-1);
//gr[y-1].push_back(x-1);
}
for(v=0;v<n;v++)
{
//cout<<" Taking "<<v+1<<" as the root : ";
for(i=0;i<n;i++)
dist[i]=0;
//push v in q;
q.push(v);
dist[v]=0;
d=0;
//while(queue is not empty)
while(!q.empty())
{
//pop element from queue
ele=q.front();
q.pop();
if(gr[ele].size()!=0)
d++;
if(isprime(d))
p=1;
else p=0;
//cout<<"d is "<<d<<" and p is "<<p<<endl;
for(j=0;j<(int)gr[ele].size();j++)
{
//push adjacent vertices in queue
q.push(gr[ele][j]);
dist[gr[ele][j]]=d;
if(p==1 && d!=1)
cnt++;
}
}
//cout<<"cnt is "<<cnt<<endl;
/*
cout<<"The distances are\n";
for(i=0;i<n;i++)
cout<<dist[i]<<" ";
cout<<endl; */
}
//cout<<"cnt is "<<cnt<<endl;
//cout<<"total is "<<tot<<endl;
ans=cnt/tot;
cout<<ans<<endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PmdyWzUwMDAwMF07CnF1ZXVlPGludD4gcTsKCmludCBpc3ByaW1lKGludCB4KQp7CglpbnQgaSxmPTE7CglpZih4PT0yfHx4PT0zKQoJIHJldHVybiAxOwoJIAoJZm9yKGk9MjtpKmk8PXg7aSsrKQoJewoJCWlmKHglaT09MCkKCQl7CgkJCWY9MDsKCQkJYnJlYWs7CgkJfQoJfQoJCglyZXR1cm4gZjsKfQoKaW50IGRpc3RbNTAwMDAxXTsKCmludCBtYWluKCkKewoJaW50IGUsaSx2LGQ9MCx4LHksZWxlLGoscD0wOwoJZG91YmxlIGFucyxuLGNudD0wOwoJY2luPj5uOwoJaW50IHRvdD0gbioobi0xKTsKCXRvdC89MjsKCQoJZm9yKGk9MDtpPG47aSsrKQoJIHsKCSAJZ3JbaV0uY2xlYXIoKTsKCSAJZGlzdFtpXT0wOwoJIH0KCQoJZm9yKGU9MDtlPG4tMTtlKyspCgl7CgkJY2luPj54Pj55OwoJCWdyW3gtMV0ucHVzaF9iYWNrKHktMSk7CgkJLy9nclt5LTFdLnB1c2hfYmFjayh4LTEpOwoJfQoJCglmb3Iodj0wO3Y8bjt2KyspCgl7CgkgICAvL2NvdXQ8PCIgVGFraW5nICI8PHYrMTw8IiBhcyB0aGUgcm9vdCA6ICI7CgkJCgkgICBmb3IoaT0wO2k8bjtpKyspCgkJIGRpc3RbaV09MDsKCQoJICAgIC8vcHVzaCB2IGluIHE7CgkgICAgcS5wdXNoKHYpOwoJCSAKCQlkaXN0W3ZdPTA7CgkJZD0wOwoJCQoJCS8vd2hpbGUocXVldWUgaXMgbm90IGVtcHR5KQoJCXdoaWxlKCFxLmVtcHR5KCkpCgkJewoJCQkvL3BvcCBlbGVtZW50IGZyb20gcXVldWUKCQkJZWxlPXEuZnJvbnQoKTsKCQkJcS5wb3AoKTsKCQkJCgkJCWlmKGdyW2VsZV0uc2l6ZSgpIT0wKQoJCQkgZCsrOwoJCQkgCgkJCWlmKGlzcHJpbWUoZCkpCgkJCXA9MTsKCQkJZWxzZSBwPTA7CgkJCQoJCQkvL2NvdXQ8PCJkIGlzICI8PGQ8PCIgYW5kIHAgaXMgIjw8cDw8ZW5kbDsKCQkJCgkJCWZvcihqPTA7ajwoaW50KWdyW2VsZV0uc2l6ZSgpO2orKykKCQkJewoJCQkJLy9wdXNoIGFkamFjZW50IHZlcnRpY2VzIGluIHF1ZXVlCgkJCQlxLnB1c2goZ3JbZWxlXVtqXSk7CgkJCQlkaXN0W2dyW2VsZV1bal1dPWQ7CgkJCQlpZihwPT0xICYmIGQhPTEpCgkJCQkgY250Kys7CgkJCX0KCQl9CgkJCgkJLy9jb3V0PDwiY250IGlzICI8PGNudDw8ZW5kbDsKCQkvKgoJCWNvdXQ8PCJUaGUgZGlzdGFuY2VzIGFyZVxuIjsKCQlmb3IoaT0wO2k8bjtpKyspCgkJIGNvdXQ8PGRpc3RbaV08PCIgIjsKCQkKCQkgY291dDw8ZW5kbDsgKi8KCX0KCQoJLy9jb3V0PDwiY250IGlzICI8PGNudDw8ZW5kbDsKCS8vY291dDw8InRvdGFsIGlzICI8PHRvdDw8ZW5kbDsKCWFucz1jbnQvdG90OwoJY291dDw8YW5zPDxlbmRsOwoJCglyZXR1cm4gMDsKfQ==