#include<bits/stdc++.h>
using namespace std;

const int N=5005;
const int MOD=1e9+7;
int n,ans;
vector<int> nei[N],son[N];
int dp[N][N][2],f[N][2],sz[N],w[N];

void predfs(int x,int p){
	for(int i=0;i<nei[x].size();i++){
		int to=nei[x][i];
		if(to!=p){
			predfs(to,x);
			son[x].push_back(to);
		}
	}
}

void dfs(int x){
	for(int i=0;i<son[x].size();i++) dfs(son[x][i]);
	dp[x][1][0]=1;
	sz[x]=1;
	for(int i=0;i<son[x].size();i++){
		int to=son[x][i];
		memset(f,0,sizeof(f));
		for(int j=1;j<=sz[x];j++) for(int k=1;k<=sz[to];k++) for(int a=0;a<2;a++) for(int b=0;b<2;b++){
			f[j+k][a^b]=(f[j+k][a^b]+1ll*dp[x][j][a]*dp[to][k][b]%MOD)%MOD;
			f[j][a^b^1]=(f[j][a^b^1]+1ll*dp[x][j][a]*dp[to][k][b]%MOD*w[k]%MOD)%MOD;
		}
		sz[x]+=sz[to];
		for(int j=1;j<=sz[x];j++) for(int a=0;a<2;a++) dp[x][j][a]=f[j][a];
	}
//	printf("%d\n",x);
//	for(int i=1;i<=sz[x];i++) printf("%d %d\n",dp[x][i][0],dp[x][i][1]);
}

int main(){
	scanf("%d",&n);
	w[0]=1;
	for(int i=2;i<=n;i+=2) w[i]=1ll*(i-1)*w[i-2]%MOD;
	for(int i=1;i<n;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		nei[x].push_back(y);
		nei[y].push_back(x);
	}
	predfs(1,-1);
	dfs(1);
	for(int i=2;i<=n;i++) ans=((ans+1ll*w[i]*(dp[1][i][0]-dp[1][i][1])%MOD)%MOD+MOD)%MOD;
	printf("%d\n",ans);
	return 0;
}