#include <bits/stdc++.h>
using namespace std;
const long long p = 998244353;
long long fac[1000020], inv[1000020], pow_[1000020], ans;
int n;
inline long long pow_er(long long x, int y) {
  long long res = 1;
  while (y) {
    if (y & 1) res = res * x % p;
    x = x * x % p;
    y >>= 1;
  }
  return res;
}
void init() {
  fac[0] = 1, pow_[0] = 1;
  for (int i = 1; i <= n; i++) {
    fac[i] = fac[i - 1] * i % p;
    pow_[i] = pow_[i - 1] * 3 % p;
  }
  inv[n] = pow_er(fac[n], p - 2);
  for (int i = n - 1; i >= 1; i--) inv[i] = inv[i + 1] * (i + 1) % p;
}
inline long long C(int n, int m) {
  if (n == m || !m) return 1;
  return fac[n] * inv[m] % p * inv[n - m] % p;
}
void calc() {
  for (int i = 1; i <= n; i++) {
    if (i & 1)
      ans = (ans + C(n, i) * pow_[i] % p * pow_er(pow_[n - i], n) * 2) % p;
    else
      ans =
          ((ans - C(n, i) * pow_[i] % p * pow_er(pow_[n - i], n) * 2) % p + p) %
          p;
  }
  for (int i = 0; i < n; i++) {
    long long cur =
        3ll * C(n, i) * (pow_er(1 - pow_[i], n) - pow_er(-pow_[i], n)) % p;
    if (i & 1)
      ans = (ans + cur) % p;
    else
      ans = (ans - cur + p) % p;
  }
  ans = (ans % p + p) % p;
}
int main() {
  scanf("%d", &n);
  init();
  calc();
  cout << ans << endl;
  return 0;
}
