#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> v[500007];
int subtree[500007];
long long dp[500007][2];
long long pw[500007];
int ans = 0;
void dfs(int vertex, int prv) {
  int sz = v[vertex].size();
  dp[vertex][0] = 1;
  dp[vertex][1] = 0;
  for (int i = 0; i < sz; ++i) {
    int h = v[vertex][i];
    if (h == prv) {
      continue;
    }
    dfs(h, vertex);
    subtree[vertex] += 1 + subtree[h];
    dp[vertex][1] *= (2 * dp[h][0] + 2 * dp[h][1]) % 998244353;
    dp[vertex][1] %= 998244353;
    dp[vertex][1] =
        (dp[vertex][1] + (dp[vertex][0] * dp[h][0]) % 998244353) % 998244353;
    dp[vertex][0] *= (dp[h][0] + 2 * dp[h][1]) % 998244353;
    dp[vertex][0] %= 998244353;
  }
  ans += (dp[vertex][1] * pw[n - subtree[vertex] - 1]) % 998244353;
  if (ans >= 998244353) {
    ans -= 998244353;
  }
}
void input() {
  scanf("%d", &n);
  for (int i = 1; i < n; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    v[x].push_back(y);
    v[y].push_back(x);
  }
  pw[0] = 1;
  for (int i = 1; i <= n; ++i) {
    pw[i] = (pw[i - 1] * 2) % 998244353;
  }
}
void solve() {
  dfs(1, -1);
  ans = (ans * 2) % 998244353;
  printf("%d\n", ans);
}
int main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(NULL);
  input();
  solve();
  return 0;
}
