#include<bits/stdc++.h>
using namespace std;
#define MAXN 100005
#define lowbit(x) (x&-x)
#define reg register
typedef long long LL;
typedef unsigned long long uLL;
typedef unsigned int uint;
typedef pair<int,int> pii;
const LL INF=0x7f7f7f7f7f7f;
const int mo=998244353;
const double PI=acos(-1.0);
template<typename _T>
_T Fabs(_T x){return x<0?-x:x;}
template<typename _T>
void read(_T &x){
	_T f=1;x=0;char s=getchar();
	while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}
	while('0'<=s&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar();}
	x*=f;
}
int n,head[MAXN],tot,k,pow2[MAXN],dp[305][605],tmp[605],sumx[605],sumy[605],ans;
struct edge{int to,nxt;}e[MAXN];
void addEdge(int u,int v){e[++tot]=(edge){v,head[u]};head[u]=tot;}
int add(int x,int y){return x+y<mo?x+y:x+y-mo;}
int qkpow(int a,int s){int t=1;while(s){if(s&1)t=1ll*a*t%mo;a=1ll*a*a%mo;s>>=1;}return t;}
void merge(int x,int y){
	sumx[0]=dp[x][0];for(int i=1;i<=2*k;i++)sumx[i]=add(sumx[i-1],dp[x][i]);
	sumy[0]=dp[y][0];for(int i=1;i<=2*k;i++)sumy[i]=add(sumy[i-1],dp[y][i]);
	for(int i=0;i<k;i++){
		tmp[i]=add(tmp[i],1ll*dp[x][i]*sumy[2*k-i-1]%mo);
		tmp[i]=add(tmp[i],1ll*dp[y][i]*sumx[2*k-i-1]%mo);
		if(i)tmp[i]=add(tmp[i],mo-1ll*dp[x][i]*sumy[i-1]%mo);
		if(i)tmp[i]=add(tmp[i],mo-1ll*dp[y][i]*sumx[i-1]%mo);
		tmp[i]=add(tmp[i],mo-1ll*dp[x][i]*dp[y][i]%mo);
	}
	for(int i=k;i<=2*k;i++){
		tmp[i]=add(tmp[i],1ll*dp[x][i]*sumy[i]%mo);
		tmp[i]=add(tmp[i],1ll*dp[y][i]*sumx[i]%mo);
		if(i<2*k)tmp[i]=add(tmp[i],mo-1ll*dp[x][i]*sumy[2*k-i-1]%mo);
		if(i<2*k)tmp[i]=add(tmp[i],mo-1ll*dp[y][i]*sumx[2*k-i-1]%mo);
		tmp[i]=add(tmp[i],mo-1ll*dp[x][i]*dp[y][i]%mo);
	}
	for(int i=0;i<=2*k;i++)dp[x][i]=tmp[i],tmp[i]=sumx[i]=sumy[i]=0;
}
void dosaka(int u,int fa){
	dp[u][k]=1;
	for(int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;if(v==fa)continue;
		dosaka(v,u);merge(u,v);
	}
	int sum=0;
	for(int i=2*k;i;i--)sum=add(sum,dp[u][i]),dp[u][i]=dp[u][i-1];
	dp[u][0]=add(dp[u][0],sum);
}
signed main(){
	read(n);pow2[0]=1;for(int i=1;i<=n;i++)pow2[i]=add(pow2[i-1],pow2[i-1]);
	for(int i=1,u,v;i<n;i++)read(u),read(v),addEdge(u,v),addEdge(v,u);
	for(k=1;k<=n;k++){
		for(int i=1;i<=n;i++)for(int j=0;j<=2*k;j++)dp[i][j]=0;dosaka(1,0);
		int res=pow2[n];for(int i=0;i<=k;i++)res=add(res,mo-dp[1][i]);ans=add(ans,res);
	}
	ans=1ll*qkpow(pow2[n],mo-2)*add(ans,mo-1)%mo;
	printf("%d\n",ans);
	return 0;
}
/*
3/4*1+1/4*3
*/
