#include <bits/stdc++.h>

using namespace std;

const int mod = (int )(1e9) + 7;

vector<int> E[10001];
int sz[10001];
int f[5001][5001];
int tmp[10001];
int n;
int g[10001];
void add(int u, int v) {
	E[u].push_back(v);
	E[v].push_back(u);
}

void upd(int& x, int y) {
	x += y;
	if (x >= mod) x -= mod;
}

void dfs(int x, int fa) {
	sz[x] = f[x][1] = 1;
	for (int i = 0; i < (int )E[x].size(); i ++) {
		int v = E[x][i];
		if (v == fa) continue;
		dfs(v, x);
		for (int j = 1; j <= sz[x] + sz[v]; j ++) tmp[j] = 0;
		for (int j = 1; j <= sz[x]; j ++)
			for (int k = 1; k <= sz[v]; k ++) {
				upd(tmp[j + k], 1LL * f[x][j] * f[v][k] % mod);
				if (k & 1 ^ 1) {
					upd(tmp[j], mod - 1LL * f[x][j] * f[v][k] % mod * g[k] % mod);
				}
			}
		sz[x] += sz[v];
		for (int j = 1; j <= sz[x]; j ++) {
			f[x][j] = tmp[j];
		}
	}
}


int main( ){
	int x, y;
	int ans = 0;
	scanf("%d", &n);
	for (int i = 1; i < n; i ++) {
		scanf("%d %d", &x, &y);
		add(x, y);
	}
	for (int i = 2; i <= n; i += 2) {
		g[i] = 1;
		for (int j = i - 1; j >= 1; j -= 2) g[i] = 1LL * g[i] * j % mod;
	}

	dfs(1, 0);
	for (int i = 2; i <= n; i += 2) upd(ans, 1LL * f[1][i] * g[i] % mod);
	printf("%d\n", ans);
	return 0;
}
