// This code wrote by chtholly_micromaker(MicroMaker)
#include <bits/stdc++.h>
#define reg register
#define int long long
#define ALL(x) (x).begin(),(x).end()
#define mem(x,y) memset(x,y,sizeof x)
#define sz(x) (int)(x).size()
#define ln std::puts("")
#define lsp std::putchar(32)
#define pb push_back
#define MP std::make_pair
#define dbg(x) std::cerr<<__func__<<"\tLine:"<<__LINE__<<' '<<#x<<": "<<x<<"\n"
#define dprintf(x...) std::fprintf(stderr,x)
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,b,a) for(int i=(b);i>=(a);--i)
const int MaxN=305;
const int p=998244353;
template <class t> inline void read(t &s){s=0;
reg int f=1;reg char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c))s=(s<<3)+(s<<1)+(c^48),c=getchar();s*=f;return;}
template<class t,class ...A> inline void read(t &x,A &...a){read(x);read(a...);}
template <class t> inline void write(t x){if(x<0)putchar('-'),x=-x;
int buf[21],top=0;while(x)buf[++top]=x%10,x/=10;if(!top)buf[++top]=0;
while(top)putchar(buf[top--]^'0');return;}
inline void setIn(std::string s){freopen(s.c_str(),"r",stdin);return;}
inline void setOut(std::string s){freopen(s.c_str(),"w",stdout);return;}
inline void setIO(std::string s=""){setIn(s+".in");setOut(s+".out");return;}
template <class t>inline bool checkmin(t&x,t y){if(x>y){x=y;return 1;}return 0;}
template <class t>inline bool checkmax(t&x,t y){if(x<y){x=y;return 1;}return 0;}
inline int lowbit(int x){return x&(-x);}
inline int fpow(int a,int b)
{
	reg int res=1;
	for(;b;b>>=1,a=a*a%p)
		if(b&1)
			res=res*a%p;
	return res;
}
std::vector<int> E[MaxN];
int f[MaxN][MaxN][2],g[MaxN][2],len[MaxN],R,n;
inline void merge(int &s,int &k,int s1,int s2,int k1,int k2)
{
	if(k1>k2)std::swap(s1,s2),std::swap(k1,k2);
	if(!k1&&!k2)s=std::min(s1,s2),k=0;
	else if(!k1&&k2)
	{
		if(s1+s2<=R)s=s1,k=0;
		else s=s2,k=1;
	}
	else s=std::max(s1,s2),k=1;
	if(s>R)
	{
		if(k)k=-1;
		else k=1,s=0;
	}
}
inline void dfs(int u,int fa)
{
	f[u][0][0]=f[u][0][1]=1,len[u]=1;
	for(auto v:E[u])if(v!=fa)
	{
		dfs(v,u),len[v]+=1;
		reg int lim=len[u]+len[v];
		for(int i=0;i<=lim;++i)g[i][0]=g[i][1]=0;
		for(int s1=0;s1<=len[u];++s1)
			for(int s2=0;s2<len[v];++s2)
				for(int k1=0;k1<2;++k1)
					for(int k2=0;k2<2;++k2)
					{
						int s,k;merge(s,k,s1,s2+1,k1,k2);
						if(~k)g[s][k]+=f[u][s1][k1]*f[v][s2][k2]%p;
					}
		for(int i=0;i<=lim;++i)
			f[u][i][0]=g[i][0]%p,f[u][i][1]=g[i][1]%p;
		checkmax(len[u],len[v]);
	}
}
int s[MaxN];
signed main(void)
{
	read(n);
	reg int u,v;
	for(int i=1;i<n;++i)read(u,v),E[u].pb(v),E[v].pb(u);
	for(R=0;R<n;++R)
	{
		std::mem(f,0),dfs(1,0);
		for(int j=0;j<=R;++j)
			s[R]+=f[1][j][0];
		s[R]%=p;
	}
	reg int ans=n-1;
	for(int i=1;i<n;++i)
		(ans+=(s[i]-s[i-1]+p)%p*(i-1)%p)%=p;
	write(ans*fpow(fpow(2,n),p-2)%p),ln;
	return 0;
}

/*
 * Check List:
 * 1. Input / Output File (OI)
 * 2. long long 
 * 3. Special Test such as n=1
 * 4. Array Size
 * 5. Memory Limit (OI) int is 4 and longlong is 8
 * 6. Mod (a*b%p*c%p not a*b*c%p  ,  (a-b+p)%p not a-b )
 * 7. Name ( int k; for(int k...))
 * 8. more tests , (T=2 .. more)
 * 9. blank \n after a case
*/




