

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

// types - only for stuff used a lot 
using ll = long long;
#define vv vector
#define Pp pair

// IO
#define get(x) scanf("%d",&x)
#define getl(x) scanf("%lld",&x);

// Operations
#define pb push_back
#define pob pop_back
#define sz(a) int(a.size()) 
#define re(a,b) a=max(a,b) // relax
#define ri(a,b) a=min(a,b) // relaxi

// Debugging

#ifndef LOCAL
#define cerr if (0) cerr
#else
#define cerr cout
#endif

#define print(arr,n) {for (int _ = 0; _ < n; _++) cerr<<arr[_]<<" "; cerr << endl; }
#define printv(vec)  {for (int _ : vec) cerr<<_<<" "; cerr<<endl;}

const int mod = 1e9+7, oo = 1e9;
const ll loo = 1e18;

// Functions 
ll modpow(ll a, ll b) {
	ll ans = 1; // faster modpow than recursive
	for (; b; b/=2,a=a*a%mod)
		if (b&1) ans = (ans*a)%mod;
	return ans;
}
ll gcd(ll a, ll b) {
	while (a) b%=a,swap(a,b);
	return b;
}
#define bitcount __builtin_popcountll
#define f(i,a,b) for (int i = a; i < b; i++)
#define fr(i,a,b) for (int i = b-1; i >= a; i--)


/* 

   ALRIGHT HACKERS, THIS IS WHERE THE ACTUAL CODE BEGINS

 */

const bool DEBUG = 1;
const int mxn = 5001;

int n;
int sz[mxn];
ll dp[mxn][mxn];
ll pr[mxn];
vv<int> adj[mxn];

void add(ll &a, ll b) {
	if (b >= mod) b%=mod;
	a+=b; if (a>=mod) a-=mod;
}

void dfs(int v, int p) {
	f(i,0,mxn) dp[v][i] = 0;
	sz[v] = 1; dp[v][1] = 1;
	for (int w : adj[v]) if (w != p){
		dfs(w,v);	
		vv<ll> nxtlayer(sz[v]+sz[w]+1,0);
		f(i,0,sz[v]+1) f(j,0,sz[w]+1)
			add(nxtlayer[i+j],dp[v][i]*dp[w][j]);
		sz[v] += sz[w];
		f(i,0,sz[v]+1)
			dp[v][i] = nxtlayer[i];
	}
	f(i,1,sz[v]+1) if (!(i%2)) {
		add(dp[v][0],(mod-1)*dp[v][i]%mod*pr[i]);
	}
}

void init() {
	pr[0]=1; pr[1] = 0;
	f(i,2,mxn)
		pr[i] = pr[i-2]*(i-1)%mod;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
#ifdef LOCAL
	if (DEBUG) freopen("input.txt", "r", stdin);
	if (DEBUG) freopen("output.txt", "w", stdout);
	clock_t start = clock();
#endif

	get(n);
	f(i,0,n-1) {
		int a, b; get(a); get(b);
		adj[--a].pb(--b); adj[b].pb(a);
	}
	init();
	dfs(0,-1);
	cout << (mod-dp[0][0])%mod << endl;

#ifdef LOCAL
	cout << setprecision(12) << (long double)(clock()-start) / CLOCKS_PER_SEC << endl;
#endif
	return 0;
}


