#include <bits/stdc++.h>
const int N=5005,mu=1e9+7;
int g[N],to[N<<1],edge,last[N],Next[N<<1],n,x,y,t[N],siz[N],dp[N][N],inv[N],p[N];
void add(int x,int y){
	to[++edge]=y;
	Next[edge]=last[x];
	last[x]=edge;
}
void dfs(int x,int fa){
	dp[x][1]=1,siz[x]=1;
	for (int i=last[x];i;i=Next[i]){
		int u=to[i];
		if (u==fa) continue;
		dfs(u,x);
		for (int j=0;j<=siz[x]+siz[u];j++) t[j]=0;
		for (int j=1;j<=siz[x];j++)
			for (int k=0;k<=siz[u];k++)
				t[j+k]=(t[j+k]+1ll*dp[x][j]*dp[u][k])%mu;
		siz[x]+=siz[u];
		for (int j=0;j<=siz[x];j++) dp[x][j]=t[j];
	}
	for (int i=2;i<=siz[x];i+=2) dp[x][0]=(dp[x][0]+1ll*(mu-dp[x][i])*g[i]%mu)%mu;
}
int main(){
	scanf("%d",&n);
	for (int i=1;i<n;i++){
		scanf("%d%d",&x,&y);
		add(x,y),add(y,x);
	}
	g[0]=1;
	for (int i=2;i<=n;i+=2) g[i]=1ll*g[i-2]%mu*(i-1)%mu;
	dfs(1,0);
	printf("%d\n",mu-dp[1][0]);
}