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

typedef long long ll;
const int maxn=5e3+10,mod=1e9+7,inv2=mod+1>>1;
int n;
ll val[maxn];
vector<int> g[maxn];
vector<ll> dp[maxn];

inline ll fpow(ll a,ll n){
	ll res=1;
	for(;n;n>>=1,a=a*a%mod)
		if(n&1ll)
			res=res*a%mod;
	return res;
}
inline void init(){
	for(int i=2;i<maxn;i+=2){
		val[i]=fpow(inv2,i/2);
		for(int j=i/2+1;j<=i;++j)
			val[i]=val[i]*j%mod;
	}
}
vector<ll> mul(vector<ll> a,vector<ll> b){
	vector<ll> res(a.size()+b.size()-1);
	for(int i=0;i<a.size();++i)
		for(int j=0;j<b.size();++j)
			(res[i+j]+=a[i]*b[j])%=mod;
	return res;
}
void dfs(int pos,int fa){
	if(fa)
		g[pos].erase(find(g[pos].begin(),g[pos].end(),fa));
	dp[pos].push_back(0);
	dp[pos].push_back(1);
	for(int i=0;i<g[pos].size();++i){
		dfs(g[pos][i],pos);
		dp[pos]=mul(dp[pos],dp[g[pos][i]]);
	}
	for(int i=2;i<dp[pos].size();i+=2)
		(dp[pos][0]+=dp[pos][i]*(mod-val[i]))%=mod;
}

int main(){
	cin>>n;
	for(int i=1,u,v;i<n;++i){
		cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	init();
	dfs(1,0);
	cout<<(mod-dp[1][0])%mod<<endl;
	return 0;
}