#include<stdio.h>
#include<string.h>
typedef long long ll;
const int mod=1000000007;
int mul(int a,int b){return(ll)a*b%mod;}
int ad(int a,int b){return(a+b)%mod;}
void inc(int&a,int b){(a+=b)%=mod;}
int h[5010],nex[10010],to[10010],M;
void add(int a,int b){
	M++;
	to[M]=b;
	nex[M]=h[a];
	h[a]=M;
}
int siz[5010],f[5010][5010][2],g[5010],p[5010][2];
void dfs(int fa,int x){
	int i,j,k,t1,t2;
	siz[x]=1;
	f[x][1][0]=1;
	for(i=h[x];i;i=nex[i]){
		if(to[i]!=fa){
			dfs(x,to[i]);
			memset(p,0,sizeof(p));
			for(j=1;j<=siz[x];j++){
				for(k=1;k<=siz[to[i]];k++){
					t1=ad(mul(f[x][j][0],f[to[i]][k][0]),mul(f[x][j][1],f[to[i]][k][1]));
					t2=ad(mul(f[x][j][0],f[to[i]][k][1]),mul(f[x][j][1],f[to[i]][k][0]));
					inc(p[j+k][0],t1);
					inc(p[j+k][1],t2);
					inc(p[j][0],mul(g[k],t2));
					inc(p[j][1],mul(g[k],t1));
				}
			}
			siz[x]+=siz[to[i]];
			memcpy(f[x],p,sizeof(p));
		}
	}
}
int main(){
	int n,i,x,y,s;
	scanf("%d",&n);
	for(i=1;i<n;i++){
		scanf("%d%d",&x,&y);
		add(x,y);
		add(y,x);
	}
	g[0]=1;
	for(i=2;i<=n;i+=2)g[i]=mul(g[i-2],i-1);
	dfs(0,1);
	s=0;
	for(i=2;i<=n;i+=2)inc(s,mul(g[i],f[1][i][0]-f[1][i][1]));
	printf("%d",ad(s,mod));
}