#include <bits/stdc++.h>

typedef long long LL;
const int N = 5005, mod = 1000000007;

int n, head[N], g[N], tot;
struct edge { int to, nxt; } e[N << 1];

void link(int x, int y) {
	e[++tot] = (edge) { y, head[x] }, head[x] = tot;
	e[++tot] = (edge) { x, head[y] }, head[y] = tot;
}

typedef std::vector<int> poly;

poly operator * (const poly &a, const poly &b) {
	poly ret(a.size() + b.size() - 1);
	for (int i = 0; i < a.size(); ++i)
		for (int j = 0; j < b.size(); ++j)
			ret[i + j] = (ret[i + j] + (LL) a[i] * b[j]) % mod;
	return ret;
}

poly calc(poly a) {
	for (int i = 1; i < a.size(); ++i)
		a[0] = (a[0] + (LL) (mod - a[i]) * g[i]) % mod;
	return a;
}

poly dfs(int x, int f = 0) {
	poly ret(2); ret[1] = 1;
	for (int i = head[x]; i; i = e[i].nxt) if (e[i].to != f) {
		ret = ret * calc(dfs(e[i].to, x));
	}
	return ret;
}

int main() {
	std::ios::sync_with_stdio(0), std::cin.tie(0);
	std::cin >> n;
	g[0] = 1;
	for (int i = 2; i <= n; i += 2)
		g[i] = (LL) (i - 1) * g[i - 2] % mod;
	for (int i = 1, x, y; i < n; ++i)
		std::cin >> x >> y, link(x, y);
	poly ret = dfs(1);
	int ans = 0;
	for (int i = 0; i < ret.size(); ++i)
		ans = (ans + (LL) g[i] * ret[i]) % mod;
	std::cout << ans << '\n';
	return 0;
}