#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod=1000000007;
struct bian
{
	int nxt,to;
}bi[10010];
int n,head[5050],num,dp[5050][5050],siz[5050],s[5050],ans;
inline void addedge(int from,int to){bi[++num]=bian{head[from],to};head[from]=num;}
void dfs(int v,int fa)
{
	siz[v]=1;
	dp[v][1]=1;
	for(int i=head[v],u;i;i=bi[i].nxt)
	{
		u=bi[i].to;
		if(u==fa)continue;
		dfs(u,v);
		int sum=0;
		for(int k=2;k<=siz[u];k+=2)sum=(sum+1ll*dp[u][k]*s[k])%mod;
		for(int j=siz[v]+siz[u];j;--j)
		{
			dp[v][j]=1ll*(mod-sum)*dp[v][j]%mod;
			for(int k=max(1,j-siz[v]);k<=siz[u]&&k<j;++k)dp[v][j]=(dp[v][j]+1ll*dp[u][k]*dp[v][j-k])%mod;
		}
		siz[v]+=siz[u];
	}
//	printf("%d:\n",v);
//	for(int i=1;i<=siz[v];++i)printf("%d ",dp[v][i]);printf("\n");
}
int main()
{
	scanf("%d",&n);
	s[0]=1;
	for(int i=2;i<=n;i+=2)s[i]=1ll*s[i-2]*(i-1)%mod;
	int x,y;
	for(int i=1;i<n;++i)
	{
		scanf("%d %d",&x,&y);
		addedge(x,y),addedge(y,x);
	}
	dfs(1,0);
	for(int i=2;i<=n;i+=2)ans=(ans+1ll*s[i]*dp[1][i])%mod;
	printf("%d",ans);
	return 0;
}
