#include <bits/stdc++.h>
using namespace std;
inline int Read() {
  char c = getchar();
  int num = 0;
  while ('0' > c || c > '9') c = getchar();
  while ('0' <= c && c <= '9') num = num * 10 + c - '0', c = getchar();
  return (num);
}
int tot, l[500010];
struct Edge {
  int to, old;
} e[500010 * 2];
inline void Lnk(int x, int y) {
  e[++tot].to = y, e[tot].old = l[x], l[x] = tot;
}
inline int Inv(int x) {
  int rs = 1, y = 998244353 - 2;
  while (y) {
    if (y & 1) rs = rs * 1ll * x % 998244353;
    x = x * 1ll * x % 998244353, y /= 2;
  }
  return (rs);
}
int n, f[500010][2], g[500010][2], sz[500010], pw[500010];
inline void Dfs(int x, int y) {
  int nm0 = 1, nm1 = 1;
  sz[x] = 1;
  g[x][0] = 1;
  for (int i = l[x]; i; i = e[i].old)
    if (e[i].to != y) {
      Dfs(e[i].to, x);
      sz[x] += sz[e[i].to];
      g[x][0] =
          g[x][0] * 1ll * (g[e[i].to][1] * 2ll + g[e[i].to][0]) % 998244353;
    }
  g[x][1] = pw[sz[x] - 1];
  g[x][1] = (g[x][1] - g[x][0] + 998244353) % 998244353;
  for (int i = l[x]; i; i = e[i].old)
    if (e[i].to != y) {
      int wy = (g[e[i].to][1] * 2ll + g[e[i].to][0]) % 998244353;
      wy = g[x][0] * 1ll * Inv(wy) % 998244353;
      f[x][0] = (f[x][0] +
                 wy * 1ll * (f[e[i].to][1] * 2ll + f[e[i].to][0]) % 998244353) %
                998244353;
      f[x][1] = (f[x][1] + (f[e[i].to][0] + f[e[i].to][1]) * 1ll *
                               pw[sz[x] - sz[e[i].to]] % 998244353) %
                998244353;
    }
  f[x][1] = (f[x][1] - f[x][0] + 998244353) % 998244353;
  f[x][1] = (f[x][1] + g[x][1]) % 998244353;
}
int main() {
  n = Read();
  for (int i = 1; i < n; i++) {
    int x = Read(), y = Read();
    Lnk(x, y), Lnk(y, x);
  }
  pw[0] = 1;
  for (int i = 1; i <= n; i++) pw[i] = pw[i - 1] * 2ll % 998244353;
  Dfs(1, 0);
  printf("%d\n", 2ll * (f[1][0] + f[1][1]) % 998244353);
}
