← Home
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)
}