#include <bits/stdc++.h>
#pragma GCC optimize("3", "inline", "Ofast")
using namespace std;
template <class T>
inline void read(T &x) {
  x = 0;
  T f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) x = x * 10 + ch - 48, ch = getchar();
  x *= f;
}
inline void Setfile(string Str = "") {
  if (Str == "") return;
  freopen((Str + ".in").c_str(), "r", stdin);
  freopen((Str + ".out").c_str(), "w", stdout);
}
const int maxn = 500005, mod = 998244353;
int n, f[maxn][2], pw2[maxn], sz[maxn], ans;
vector<int> G[maxn];
inline int Add(int x, int y) { return (x += y) >= mod ? x - mod : x; }
inline int Mul(int x, int y) { return 1ll * x * y % mod; }
inline void dfs(int u = 1, int p = 0) {
  f[u][0] = sz[u] = 1;
  for (int i = 0; i < (int)G[u].size(); ++i) {
    int v = G[u][i];
    if (v == p) continue;
    dfs(v, u), sz[u] += sz[v],
        f[u][1] = Add(Mul(f[u][1], Mul(2, Add(f[v][0], f[v][1]))),
                      Mul(f[u][0], f[v][0])),
        f[u][0] = Mul(f[u][0], Add(Mul(f[v][1], 2), f[v][0]));
  }
  ans = Add(ans, Mul(f[u][1], pw2[n - sz[u] + 1]));
}
int main() {
  Setfile();
  pw2[0] = 1;
  for (int i = 1; i < maxn; ++i) pw2[i] = Add(pw2[i - 1], pw2[i - 1]);
  read(n);
  for (int i = 1, x, y; i < n; ++i)
    read(x), read(y), G[x].push_back(y), G[y].push_back(x);
  dfs(), printf("%d\n", ans);
}
