#include <bits/stdc++.h>
#pragma GCC optimize "-O3"
inline int lowbit(int x) { return x & -x; }
const int N = 5e5 + 10;
const int mod = (int)998244353;
const int INF = 0x3f3f3f3f;
const long long LINF = (1LL << 62);
const double PI = acos(-1.0);
using namespace std;
int head[N], cnt, dp[N], n, inv2 = mod + 1 >> 1, ans;
struct Edge {
  int to, nex;
} edge[N << 1];
inline void AddEdge(int u, int v) {
  edge[++cnt].nex = head[u];
  edge[cnt].to = v;
  head[u] = cnt;
  edge[++cnt].nex = head[v];
  edge[cnt].to = u;
  head[v] = cnt;
}
void dfs(int u, int fa) {
  dp[u] = 1;
  for (int i = head[u]; i; i = edge[i].nex) {
    int v = edge[i].to;
    if (v != fa) {
      dfs(v, u);
      dp[u] = (1LL - 1LL * dp[v] * inv2) % mod * dp[u] % mod;
    }
  }
  ans = (1LL * ans + 1 - dp[u]) % mod;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    AddEdge(u, v);
  }
  dfs(1, 0);
  for (int i = 1; i <= n; i++) {
    ans = 1LL * ans * 2 % mod;
  }
  printf("%d\n", (ans + mod) % mod);
  return 0;
}
