#include <bits/stdc++.h>
using namespace std;
const long long MOD = 998244353;
template <class T>
void chmin(T &a, const T &b) {
  if (a > b) a = b;
}
template <class T>
void chmax(T &a, const T &b) {
  if (a < b) a = b;
}
int N;
vector<vector<int>> g;
vector<vector<long long>> dp;
void add(long long &a, long long b) { a = (a + b) % MOD; }
void mul(long long &a, long long b) {
  a %= MOD;
  b %= MOD;
  a = a * b % MOD;
}
void dfs(int now, int par) {
  long long all = 1;
  long long zot = 1;
  long long ng = 1;
  for (auto nex : g[now])
    if (nex != par) {
      dfs(nex, now);
      mul(all, dp[nex][0] + dp[nex][1] + dp[nex][2] + dp[nex][3]);
      mul(zot, dp[nex][0] + dp[nex][1] + dp[nex][2]);
      mul(ng, dp[nex][0] + dp[nex][1]);
    }
  dp[now][0] = all;
  dp[now][1] = (zot - ng + MOD) % MOD;
  dp[now][2] = all;
  dp[now][3] = zot;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cin >> N;
  g.resize(N);
  for (int i = 0; i < (N - 1); ++i) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  int root = 0;
  for (int i = 0; i < (N); ++i)
    if (g[i].size() == 1) root = i;
  dp.resize(N, vector<long long>(4, 0));
  dfs(root, -1);
  long long ans = dp[root][0];
  add(ans, dp[root][1]);
  add(ans, MOD - 1);
  cout << ans << endl;
  return 0;
}
