package main
import (
"bufio"
"fmt"
"os"
)
const MOD int64 = 998244353
func powMod(a, e int64) int64 {
res := int64(1)
for e > 0 {
if e&1 == 1 {
res = res * a % MOD
}
a = a * a % MOD
e >>= 1
}
return res
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n int
fmt.Fscan(in, &n)
inv := make([]int64, n+1)
if n >= 1 {
inv[1] = 1
for i := 2; i <= n; i++ {
inv[i] = MOD - (MOD/int64(i))*inv[int(MOD%int64(i))]%MOD
}
}
nn := int64(n)
p3n := powMod(3, nn)
p3n2 := powMod(p3n, nn)
t1 := powMod((p3n-1+MOD)%MOD, nn)
t2 := powMod((p3n-3+MOD)%MOD, nn)
nc := int64(0)
comb := int64(1)
p3a := int64(1)
for a := 1; a <= n; a++ {
comb = comb * int64(n-a+1) % MOD * inv[a] % MOD
p3a = p3a * 3 % MOD
base := 1 - p3a
if base < 0 {
base += MOD
}
val := powMod(base, nn)
term := comb * val % MOD
if a&1 == 1 {
nc -= term
if nc < 0 {
nc += MOD
}
} else {
nc += term
if nc >= MOD {
nc -= MOD
}
}
}
ans := (6*t1%MOD - 2*t2%MOD - p3n2 - 3*nc%MOD) % MOD
if ans < 0 {
ans += MOD
}
fmt.Fprint(out, ans)
}