#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
int N;
vector<vector<int>> adj;
vector<long long> extend(vector<long long> v) {
  v[1] = (v[0] + 2 * v[1]) % MOD;
  v[2] = 2 * v[2] % MOD;
  return v;
}
vector<long long> merge(const vector<long long> &a,
                        const vector<long long> &b) {
  vector<long long> c(3, 0);
  c[0] = a[0] * b[1] % MOD;
  c[1] = (a[0] * b[0] + a[1] * (b[0] + b[1])) % MOD;
  c[2] = (a[2] * (b[0] + b[1]) + b[2] * (a[0] + a[1]) + 2 * a[0] * b[0]) % MOD;
  return c;
}
vector<long long> dfs(int node, int parent) {
  vector<long long> answer = {1, 0, 0};
  for (int neighbor : adj[node])
    if (neighbor != parent) {
      vector<long long> child = dfs(neighbor, node);
      answer = merge(answer, extend(child));
    }
  return answer;
}
int main() {
  scanf("%d", &N);
  adj.resize(N);
  for (int i = 0; i < N - 1; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    u--;
    v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  printf("%lld\n", dfs(0, -1)[2]);
}
