#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int M=5010;
int n,sze[M];
ll cal[M],f[M][M];

struct ss{
	int to,last;
	ss(){}
	ss(int a,int b)
	:to(a),last(b){}
}g[M<<1];
int head[M],cnt;
void add(int a,int b){
	g[++cnt]=ss(b,head[a]);head[a]=cnt;
	g[++cnt]=ss(a,head[b]);head[b]=cnt;
}
void init(){
	cal[0]=1;
	for(int i=2;i<=n;i+=2)cal[i]=(cal[i-2]*(i-1))%mod;
}
void dfs(int a,int b){
	sze[a]=1;f[a][1]=1;ll tot=0;
	for(int eg=head[a];eg;eg=g[eg].last){
		if(g[eg].to==b) continue;
		dfs(g[eg].to,a);
		int tosze=sze[g[eg].to];tot=0;
		for(int i=1;i<=tosze;i++)tot=(tot+f[g[eg].to][i]*cal[i])%mod;
		for(int i=tosze+sze[a];i>0;i--){
			ll now=f[a][i]*tot%mod;
			now=-now+mod;
			for(int j=max(1,i-sze[a]),up=min(i,tosze);j<=up;j++)
			now=(now+f[a][i-j]*f[g[eg].to][j]%mod)%mod;
			f[a][i]=now;
		}
		sze[a]+=tosze;
	}
}
ll ans;
void calc(){
	for(int i=1;i<=n;i++)ans=(ans+f[1][i]*cal[i])%mod;
}
int a,b;
int main(){
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		scanf("%d%d",&a,&b);
		add(a,b);
	}
	init();
	dfs(1,0);
	calc();
	printf("%lld\n",ans);
	return 0;
}
