#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5005,mod=1e9+7;
int n,h[N],f[N][N],g[N],size[N];
struct edge{
	int to,next;
}e[N*2];
void addedge(int x,int y){
	static int cnt;
	e[++cnt]=(edge){y,h[x]};h[x]=cnt;
}
void dfs(int x,int fa){
	static int tmp[N];
	f[x][1]=size[x]=1;
	for(int i=h[x];i;i=e[i].next){
		int y=e[i].to;
		if(y==fa)continue;
		dfs(y,x);
		for(int j=1;j<=size[x]+size[y];j++)tmp[j]=0;
		for(int j=1;j<=size[x];j++)
			for(int k=1;k<=size[y];k++){
				tmp[j+k]=(tmp[j+k]+(ll)f[x][j]*f[y][k])%mod;
				tmp[j]=(tmp[j]-(ll)f[x][j]*f[y][k]%mod*g[k])%mod;
			}
		memcpy(f[x],tmp,sizeof(tmp));
		size[x]+=size[y];
	}
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		addedge(x,y);addedge(y,x);
	}
	g[0]=1;
	for(int i=2;i<=n;i+=2)g[i]=(ll)g[i-2]*(i-1)%mod;
	dfs(1,0);
	int ans=0;
	for(int i=0;i<=n;i++)ans=(ans+(ll)f[1][i]*g[i])%mod;
	cout<<(ans+mod)%mod<<"\n";
}