#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=5010,mo=1e9+7;
int w[N*2],ne[N*2],la[N],t,size[N],n;
ll f[N][N],g[N],v[N];
void link(int x,int y){
	w[++t]=y;
	ne[t]=la[x];
	la[x]=t;
}
void move(ll &a,ll b){
	a=(a+b)%mo;
}
void dfs(int x,int fa){
	f[x][1]=size[x]=1;
	for (int y=la[x];y;y=ne[y]){
		int z=w[y];
		if (z==fa)continue;
		dfs(z,x);
		memset(g,0,sizeof g);
		for (int i=0;i<=size[x];i++)
			for (int j=0;j<=size[z];j++)
				move(g[i+j],f[x][i]*f[z][j]);
		memcpy(f[x],g,sizeof g);
		size[x]+=size[z];
	}
	for (int j=2;j<=size[x];j+=2)
		move(f[x][0],-f[x][j]*v[j]);
}
int main(){
	cin>>n;
	for (int i=1;i<n;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		link(x,y);
		link(y,x);
	}
	v[0]=1;
	for (int i=2;i<=n;i+=2)v[i]=v[i-2]*(i-1)%mo;
	dfs(1,0);
	cout<<(-f[1][0]+mo)%mo<<endl;
} 