#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define Mod 1000000007
using namespace std;
int n;
int f[5010][5010];
int siz[5010];
int g[5010];
struct Edge{
	int v,nxt;
}e[10010];int tot;
int first[5010];
void build(int u,int v)
{
	e[++tot]=(Edge){v,first[u]};
	first[u]=tot;
	return ;
}
int tmp[5010];
void dfs(int u,int lst)
{
	f[u][1]=1;
	siz[u]=1;
	for(int i=first[u];i;i=e[i].nxt)
	{
		int v=e[i].v;
		if(v==lst)continue;
		dfs(v,u);
		for(int j=1;j<=siz[u];j++)
			for(int k=1;k<=siz[v];k++)
			{
				tmp[j]=(tmp[j]-(long long)f[v][k]*g[k]%Mod*f[u][j]%Mod+Mod)%Mod;
				tmp[j+k]=(tmp[j+k]+(long long)f[v][k]*f[u][j])%Mod;
			}
		siz[u]+=siz[v];
		for(int j=1;j<=siz[u];j++)
		{
			f[u][j]=tmp[j];
			tmp[j]=0;
		}
	}
	return ;
}
int main()
{
	scanf("%d",&n);
	g[0]=1;
	for(int i=2;i<=n;i++)
		g[i]=(long long)g[i-2]*(i-1)%Mod;
	for(int i=1;i<n;i++)
	{
		int u,v;
		scanf("%d %d",&u,&v);
		build(u,v);
		build(v,u);
	}
	dfs(1,0);
	int ans=0;
	for(int i=1;i<=n;i++)
		ans=(ans+(long long)f[1][i]*g[i])%Mod;
	printf("%d\n",ans);
	return 0;
}//???