/*input
10
8 5
10 8
6 5
1 5
4 8
2 10
3 6
9 2
1 7

4
1 2
2 3
3 4
*/
#include <bits/stdc++.h>
using namespace std;
#define sp ' '
#define endl '\n'
#define fi first
#define se second
#define mp make_pair
#define N 5005
#define bit(x,y) ((x>>y)&1LL)
#define loop(x) for(int xv=1; xv<=x; xv++)

#define what_is(x) cerr << #x << " is " << x << endl;
#define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
	cerr << *it << " = " << a << endl;
	err(++it, args...);
}
template <class T1, class T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &a) {
	return os << '(' << a.first << ", " << a.second << ')';
}
template <class T>
ostream &operator<<(ostream &os, const vector<T> &a) {
	os << '[';
	for (unsigned int i = 0; i < a.size(); i++)
		os << a[i] << (i < a.size() - 1 ? ", " : "");
	os << ']';
	return os;
}
template <class T>
ostream &operator<<(ostream &os, const set<T> &a) {
	os << '{';
	for (typename set<T>::iterator it = a.begin(); it != a.end(); it++) {
		typename set<T>::iterator jt = it;
		os << *it << (++jt != a.end() ? ", " : "");
	}
	os << '}';
	return os;
}
template <class T1, class T2>
ostream &operator<<(ostream &os, map<T1, T2> &a) {
	os << "{\n";
	for (typename map<T1, T2>::iterator it = a.begin(); it != a.end(); it++) {
		typename map<T1, T2>::iterator jt = it;
		os << "  " << it->first << ": " << it->second << (++jt != a.end() ? ",\n" : "\n");
	}
	os << '}';
	return os;
}

int n;
vector<vector<int> > a(N);
int dp[N][N][2];
int tdp[2][N][2];

int child[N];
int C[N][N]; int f[N];
int p2[N];

const int mod = 1e9 + 7;

#define pow binPow
long long binPow(long long a, long long q) {
	long long ret = 1;
	for (int i = 0; (1LL << i) <= q; i++) {
		if (q & (1LL << i)) ret = (ret * a) % mod;
		a = (a * a) % mod;
	}
	return ret;
}

void dfs(int u, int p) {
	child[u] = 1;
	for (auto v : a[u]) {
		if (v == p) continue;
		dfs(v, u);
		child[u] += child[v];
	}
	int sumChild = 1;
	memset(tdp, 0, sizeof(tdp));
	tdp[0][1][0] = 1;
	int c = 0;
	for (auto v : a[u]) {
		if (v == p) continue;
		for (int total = sumChild + child[v]; total >= 0; total--) {
			for (int j = max(0, total - sumChild); j <= min(child[v], total); j++) {
				int i = total - j;
				for (int xi = 0; xi <= 1; xi++) {
					for (int xj = 0; xj <= 1; xj++) {
						if (tdp[c][i][xi] == 0 || dp[v][j][xj] == 0)
							continue;
						if (j == 0)
							tdp[c ^ 1][total][xi ^ xj ^ 1] = (tdp[c ^ 1][total][xi ^ xj ^ 1] + 1LL * tdp[c][i][xi] * dp[v][j][xj]) % mod;
						else
							tdp[c ^ 1][total][xi ^ xj] = (tdp[c ^ 1][total][xi ^ xj] + 1LL * tdp[c][i][xi] * dp[v][j][xj]) % mod;
					}
				}

			}
		}
		for (int i = 0; i < N; i++) for (int j = 0; j < 2; j++) tdp[c][i][j] = 0;
		c ^= 1;
		sumChild += child[v];
	}
	for (int i = 0; i <= sumChild; i++)
		for (int j = 0; j <= 1; j++)
			dp[u][i][j] = tdp[c][i][j];
	for (int i = 2; i <= sumChild; i += 2) {
		for (int j = 0; j <= 1; j++) {
			int buf = 1LL * dp[u][i][j] * C[i / 2][i] % mod;
			buf = 1LL * buf * f[i / 2] % mod;
			buf = 1LL * buf * binPow(p2[i / 2], mod - 2) % mod;
			dp[u][0][j] = (dp[u][0][j] + buf) % mod;
		}
	}
}

signed main() {
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#ifdef in1code
	freopen("1test.inp", "r", stdin);
#endif
	cin >> n;
	for (int i = 0; i <= n; i++) C[0][i] = 1, C[1][i] = i;
	f[0] = 1; p2[0] = 1;
	for (int i = 1; i <= n; i++) f[i] = (1LL * f[i - 1] * i) % mod;
	for (int i = 1; i <= n; i++) p2[i] = (1LL * p2[i - 1] * 2) % mod;
	for (int i = 2; i <= n; i++) {
		for (int j = i; j <= n; j++) {
			C[i][j] = (C[i][j - 1] + C[i - 1][j - 1]) % mod;
		}
	}

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

Measured memory_bytes: 294272