#include<cstdio>
#define int long long
const int mod=1e9+7;
struct Edge{
	int to,nxt;
}edge[10010];
int cnt,head[5010],f[5010][5010],size[5010],tmp[5010],g[5010],n;
void addedge(int x,int y){
	edge[++cnt].to=y;
	edge[cnt].nxt=head[x];
	head[x]=cnt;
}
void dfs(int x,int fa){
	f[x][1]=1;
	size[x]=1;
	for(int i=head[x];i;i=edge[i].nxt){
		int upup=edge[i].to;
		if(upup==fa)continue;
		dfs(upup,x);
		for(int j=1;j<=size[x]+size[upup];j++)
			tmp[j]=0;
		for(int j=1;j<=size[x];j++)
			for(int k=0;k<=size[upup];k++)
				(tmp[j+k]+=f[x][j]*f[upup][k]%mod)%=mod;
		for(int j=1;j<=size[x]+size[upup];j++)
			f[x][j]=tmp[j];
		size[x]+=size[upup];
	}
	for(int i=2;i<=size[x];i+=2)
		(f[x][0]+=mod-f[x][i]*g[i]%mod)%=mod;
}
signed main(){
	g[0]=1;
	scanf("%lld",&n);
	for(int i=2;i<=n;i+=2)
		g[i]=g[i-2]*(i-1)%mod;
	for(int i=1,x,y;i<n;i++){
		scanf("%lld%lld",&x,&y);
		addedge(x,y);
		addedge(y,x);
	}
	dfs(1,0);
	printf("%lld\n",(mod-f[1][0])%mod);
} 