#include<bits/stdc++.h>

using namespace std;

#define N 5050
#define LL long long

const LL mod=1000000007;
LL n,x,y,sz[N],f[N][N][2],head[N],tot;
struct edge{LL v,nxt;}e[N*2];

void upd(LL &x,LL y){x=(x+y)%mod;}

void add(LL x,LL y){
	e[++tot].v=y; e[tot].nxt=head[x]; head[x]=tot;
}

void dfs(LL u,LL fa){
	sz[u]=1; f[u][1][0]=1;
	for (LL i=head[u],v;i;i=e[i].nxt)
		if ((v=e[i].v)!=fa){
			dfs(v,u);
			for (LL j=sz[u]+sz[v];j>=0;--j){
				int x=f[u][j][0],y=f[u][j][1];
				f[u][j][0]=(f[v][0][0]*x+f[v][0][1]*y)%mod;
				f[u][j][1]=(f[v][0][0]*y+f[v][0][1]*x)%mod;
				for (LL k=max(1LL,j-sz[u]);k<=sz[v]&&k<=j;++k){
					upd(f[u][j][0],f[v][k][0]*f[u][j-k][0]%mod+f[v][k][1]*f[u][j-k][1]%mod);
					upd(f[u][j][1],f[v][k][0]*f[u][j-k][1]%mod+f[v][k][1]*f[u][j-k][0]%mod);
				}
			}
			sz[u]+=sz[v];
		}
	for (LL i=2,t=1;i<=sz[u];i+=2,t=t*(i-1)%mod){
		upd(f[u][0][0],f[u][i][1]*t);
		upd(f[u][0][1],f[u][i][0]*t);
	}
}

int main(){
	scanf("%lld",&n);
	for (LL i=1;i<n;++i){
		scanf("%lld%lld",&x,&y);
		add(x,y); add(y,x);
	}
	dfs(1,0);
	printf("%lld\n",(f[1][0][1]-f[1][0][0]+mod)%mod);
	
	return 0;
}
			