#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  bool flag = false;
  while (!isdigit(c)) {
    if (c == '-') flag = true;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c ^ 48);
    c = getchar();
  }
  if (flag) x = -x;
}
long long n, v1, v2;
long long fac[1000010], ifac[1000010];
long long qp(long long x, long long y) {
  long long v = 1;
  while (y) {
    if (y & 1) v = v * x % 998244353;
    x = x * x % 998244353, y >>= 1;
  }
  return v;
}
long long C(int n, int m) {
  return fac[n] * ifac[m] % 998244353 * ifac[n - m] % 998244353;
}
void init() {
  fac[0] = ifac[0] = 1;
  for (int i = 1; i <= n; ++i) fac[i] = fac[i - 1] * i % 998244353;
  ifac[n] = qp(fac[n], 998244353 - 2);
  for (int i = n - 1; i; --i) ifac[i] = ifac[i + 1] * (i + 1) % 998244353;
}
int main() {
  read(n), init();
  for (int i = 1; i <= n; ++i) {
    long long v =
        C(n, i) * qp(qp(3, i * n), 998244353 - 2) % 998244353 *
        (qp((1 - qp(qp(3, n - i), 998244353 - 2) + 998244353) % 998244353, n) -
         1 + 998244353) %
        998244353;
    if (i & 1)
      v1 = (v1 - v + 998244353) % 998244353;
    else
      v1 = (v1 + v + 998244353) % 998244353;
  }
  for (int i = 1; i <= n; ++i) {
    long long v =
        C(n, i) * qp(3, n * (n - i) % (998244353 - 1) + i) % 998244353;
    if (i & 1)
      v2 = (v2 - v + 998244353) % 998244353;
    else
      v2 = (v2 + v + 998244353) % 998244353;
  }
  printf("%lld",
         ((-qp(3, (n * n + 1) % (998244353 - 1)) * v1 % 998244353 + 998244353) %
              998244353 -
          2 * v2 % 998244353 + 998244353) %
             998244353);
  return 0;
}
