#include<bits/stdc++.h>
using namespace std;
const int maxn=5e3+10;
const int mod=1e9+7;
int siz[maxn],n;
int g[maxn],dp[maxn][maxn],tmp[maxn];
struct edge{int v,nxt;}e[maxn<<1];
int head[maxn],ecnt=0;
void add(int u,int v)
{
	e[++ecnt]=(edge){v,head[u]},head[u]=ecnt;
	e[++ecnt]=(edge){u,head[v]},head[v]=ecnt;
}
void dfs(int u,int pre)
{
	siz[u]=1,dp[u][1]=1;
	for(int t=head[u];~t;t=e[t].nxt)
	{
		int v=e[t].v;
		if(v==pre)continue;
		dfs(v,u);
		for(int i=0;i<=siz[u]+siz[v];i++)tmp[i]=0;
		for(int i=0;i<=siz[u];i++)
		for(int j=0;j<=siz[v];j++)tmp[i+j]=(tmp[i+j]+dp[u][i]*1LL*dp[v][j])%mod;
		siz[u]+=siz[v];
		for(int i=0;i<=siz[u];i++)dp[u][i]=tmp[i];
	}
	for(int i=2;i<=siz[u];i+=2)dp[u][0]=(dp[u][0]+mod-dp[u][i]*1LL*g[i]%mod)%mod;
}
int main()
{
	memset(head,-1,sizeof(head));
	scanf("%d",&n);
	for(int i=1;i<n;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v);
	}
	g[0]=1;
	for(int i=2;i<=n;i+=2)g[i]=g[i-2]*1LL*(i-1)%mod;
	dfs(1,0);
	printf("%d\n",mod-dp[1][0]);
}