program neither_AB_nor_BA
  implicit none
  integer(8), parameter :: md = 998244353_8
  integer(8) :: n, i, p = 1_8, c = 1_8, x = 0_8
  read(*,*) n
  do i = 0_8, (n-1_8)/2_8
    x = mod(x+p*c,md)
    p = mod(2_8*p,md)
    c = mod(c*(n-i),md)
    c = mod(c*inv(i+1_8),md)
  end do
  write(*,'(i0)') modulo(pow(3_8,int(n,4))-2_8*x,md)
contains
  function inv(n) result(y)
    integer(8), intent(in) :: n
    integer(8) :: a, b, x, y, t, q
    a = modulo(n,md)
    b = md
    x = 0_8
    y = 1_8
    do while (b /= 0_8)
      q = a/b
      t = b
      b = mod(a,b)
      a = t
      t = y
      y = x
      x = t-q*x
    end do
    y = modulo(y,md)
  end
  function pow(a,b) result(r)
    integer(8), intent(in) :: a
    integer, intent(in) :: b
    integer :: k
    integer(8) :: r, p
    r = 1_8
    p = a
    k = b
    do while (k > 0)
      if (btest(k,0)) r = mod(r*p,md)
      p = mod(p*p,md)
      k = rshift(k,1)
    end do
  end
end program neither_AB_nor_BA
; ModuleID = 'FIRModule'
source_filename = "FIRModule"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

@_QFEc = internal unnamed_addr global i64 1
@_QFEp = internal unnamed_addr global i64 1
@_QFEx = internal unnamed_addr global i64 0
@_QQcl.0d2c0298f9c59cafefe0a09e99fc7e3a = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_3035/source.f\00"
@_QQcl.28693029 = linkonce constant [4 x i8] c"(i0)"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

define void @_QQmain() local_unnamed_addr {
  %1 = alloca i64, align 8
  %2 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.0d2c0298f9c59cafefe0a09e99fc7e3a, i32 5)
  %3 = call i1 @_FortranAioInputInteger(ptr %2, ptr nonnull %1, i32 8)
  %4 = call i32 @_FortranAioEndIoStatement(ptr %2)
  %5 = load i64, ptr %1, align 8, !tbaa !3
  %6 = icmp ult i64 %5, -9223372036854775807
  br i1 %6, label %.lr.ph.preheader, label %39

.lr.ph.preheader:                                 ; preds = %0
  %_QFEc.promoted = load i64, ptr @_QFEc, align 8, !tbaa !3
  %_QFEp.promoted = load i64, ptr @_QFEp, align 8, !tbaa !3
  %_QFEx.promoted = load i64, ptr @_QFEx, align 8, !tbaa !3
  %7 = add i64 %5, -1
  %8 = sdiv i64 %7, 2
  %9 = add nuw nsw i64 %8, 1
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %_QFPinv.exit
  %10 = phi i64 [ %37, %_QFPinv.exit ], [ %9, %.lr.ph.preheader ]
  %11 = phi i64 [ %20, %_QFPinv.exit ], [ 0, %.lr.ph.preheader ]
  %12 = phi i64 [ %26, %_QFPinv.exit ], [ %_QFEx.promoted, %.lr.ph.preheader ]
  %13 = phi i64 [ %27, %_QFPinv.exit ], [ %_QFEp.promoted, %.lr.ph.preheader ]
  %14 = phi i64 [ %36, %_QFPinv.exit ], [ %_QFEc.promoted, %.lr.ph.preheader ]
  %15 = mul i64 %14, %13
  %16 = add i64 %15, %12
  %17 = shl i64 %13, 1
  %18 = sub i64 %5, %11
  %19 = mul i64 %14, %18
  %20 = add nuw nsw i64 %11, 1
  %.urem = urem i64 %20, 998244353
  br label %21

21:                                               ; preds = %21, %.lr.ph
  %.020.i = phi i64 [ 1, %.lr.ph ], [ %.01419.i, %21 ]
  %.01419.i = phi i64 [ 0, %.lr.ph ], [ %25, %21 ]
  %.01518.i = phi i64 [ %.urem, %.lr.ph ], [ %.01617.i, %21 ]
  %.01617.i = phi i64 [ 998244353, %.lr.ph ], [ %23, %21 ]
  %22 = udiv i64 %.01518.i, %.01617.i
  %23 = urem i64 %.01518.i, %.01617.i
  %24 = mul i64 %22, %.01419.i
  %25 = sub i64 %.020.i, %24
  %.not.i = icmp eq i64 %23, 0
  br i1 %.not.i, label %_QFPinv.exit, label %21

_QFPinv.exit:                                     ; preds = %21
  %26 = srem i64 %16, 998244353
  %27 = srem i64 %17, 998244353
  %28 = srem i64 %19, 998244353
  %29 = srem i64 %.01419.i, 998244353
  %30 = icmp slt i64 %.01419.i, 0
  %31 = icmp ne i64 %29, 0
  %32 = and i1 %30, %31
  %33 = add nsw i64 %29, 998244353
  %34 = select i1 %32, i64 %33, i64 %29
  %35 = mul nsw i64 %34, %28
  %36 = srem i64 %35, 998244353
  %37 = add nsw i64 %10, -1
  %38 = icmp sgt i64 %10, 1
  br i1 %38, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %_QFPinv.exit
  store i64 %26, ptr @_QFEx, align 8, !tbaa !3
  store i64 %27, ptr @_QFEp, align 8, !tbaa !3
  store i64 %36, ptr @_QFEc, align 8, !tbaa !3
  br label %39

39:                                               ; preds = %._crit_edge, %0
  %40 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.0d2c0298f9c59cafefe0a09e99fc7e3a, i32 12)
  %41 = load i64, ptr %1, align 8, !tbaa !3
  %42 = trunc i64 %41 to i32
  %43 = icmp sgt i32 %42, 0
  br i1 %43, label %.lr.ph.i, label %_QFPpow.exit

.lr.ph.i:                                         ; preds = %39, %48
  %.011.i = phi i64 [ %.1.i, %48 ], [ 1, %39 ]
  %.0710.i = phi i64 [ %50, %48 ], [ 3, %39 ]
  %.089.i = phi i32 [ %51, %48 ], [ %42, %39 ]
  %44 = and i32 %.089.i, 1
  %.not.i3 = icmp eq i32 %44, 0
  br i1 %.not.i3, label %48, label %45

45:                                               ; preds = %.lr.ph.i
  %46 = mul i64 %.0710.i, %.011.i
  %47 = srem i64 %46, 998244353
  br label %48

48:                                               ; preds = %45, %.lr.ph.i
  %.1.i = phi i64 [ %47, %45 ], [ %.011.i, %.lr.ph.i ]
  %49 = mul nuw nsw i64 %.0710.i, %.0710.i
  %50 = urem i64 %49, 998244353
  %51 = lshr i32 %.089.i, 1
  %.not12.i = icmp ult i32 %.089.i, 2
  br i1 %.not12.i, label %_QFPpow.exit, label %.lr.ph.i

_QFPpow.exit:                                     ; preds = %48, %39
  %.0.lcssa.i = phi i64 [ 1, %39 ], [ %.1.i, %48 ]
  %52 = load i64, ptr @_QFEx, align 8, !tbaa !3
  %53 = shl i64 %52, 1
  %54 = sub i64 %.0.lcssa.i, %53
  %55 = srem i64 %54, 998244353
  %56 = icmp slt i64 %54, 0
  %57 = icmp ne i64 %55, 0
  %58 = and i1 %56, %57
  %59 = add nsw i64 %55, 998244353
  %60 = select i1 %58, i64 %59, i64 %55
  %61 = call i1 @_FortranAioOutputInteger64(ptr %40, i64 %60)
  %62 = call i32 @_FortranAioEndIoStatement(ptr %40)
  ret void
}

; Function Attrs: nofree norecurse nosync nounwind memory(argmem: read)
define i64 @_QFPinv(ptr nocapture readonly %0) local_unnamed_addr #0 {
  %2 = load i64, ptr %0, align 8, !tbaa !3
  %3 = srem i64 %2, 998244353
  %4 = icmp slt i64 %2, 0
  %5 = icmp ne i64 %3, 0
  %6 = and i1 %4, %5
  %7 = add nsw i64 %3, 998244353
  %8 = select i1 %6, i64 %7, i64 %3
  br label %9

9:                                                ; preds = %1, %9
  %.020 = phi i64 [ 1, %1 ], [ %.01419, %9 ]
  %.01419 = phi i64 [ 0, %1 ], [ %13, %9 ]
  %.01518 = phi i64 [ %8, %1 ], [ %.01617, %9 ]
  %.01617 = phi i64 [ 998244353, %1 ], [ %11, %9 ]
  %10 = sdiv i64 %.01518, %.01617
  %11 = srem i64 %.01518, %.01617
  %12 = mul i64 %10, %.01419
  %13 = sub i64 %.020, %12
  %.not = icmp eq i64 %11, 0
  br i1 %.not, label %14, label %9

14:                                               ; preds = %9
  %15 = srem i64 %.01419, 998244353
  %16 = icmp slt i64 %.01419, 0
  %17 = icmp ne i64 %15, 0
  %18 = and i1 %16, %17
  %19 = add nsw i64 %15, 998244353
  %20 = select i1 %18, i64 %19, i64 %15
  ret i64 %20
}

; Function Attrs: nofree norecurse nosync nounwind memory(argmem: read)
define i64 @_QFPpow(ptr nocapture readonly %0, ptr nocapture readonly %1) local_unnamed_addr #0 {
  %3 = load i32, ptr %1, align 4, !tbaa !3
  %4 = icmp sgt i32 %3, 0
  br i1 %4, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %2
  %5 = load i64, ptr %0, align 8, !tbaa !3
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %10
  %.011 = phi i64 [ %.1, %10 ], [ 1, %.lr.ph.preheader ]
  %.0710 = phi i64 [ %12, %10 ], [ %5, %.lr.ph.preheader ]
  %.089 = phi i32 [ %13, %10 ], [ %3, %.lr.ph.preheader ]
  %6 = and i32 %.089, 1
  %.not = icmp eq i32 %6, 0
  br i1 %.not, label %10, label %7

7:                                                ; preds = %.lr.ph
  %8 = mul i64 %.011, %.0710
  %9 = srem i64 %8, 998244353
  br label %10

10:                                               ; preds = %7, %.lr.ph
  %.1 = phi i64 [ %9, %7 ], [ %.011, %.lr.ph ]
  %11 = mul i64 %.0710, %.0710
  %12 = srem i64 %11, 998244353
  %13 = lshr i32 %.089, 1
  %.not12 = icmp ult i32 %.089, 2
  br i1 %.not12, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %10, %2
  %.0.lcssa = phi i64 [ 1, %2 ], [ %.1, %10 ]
  ret i64 %.0.lcssa
}

declare ptr @_FortranAioBeginExternalListInput(i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioInputInteger(ptr, ptr, i32) local_unnamed_addr

declare i32 @_FortranAioEndIoStatement(ptr) local_unnamed_addr

declare ptr @_FortranAioBeginExternalFormattedOutput(ptr, i64, ptr, i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputInteger64(ptr, i64) local_unnamed_addr

attributes #0 = { nofree norecurse nosync nounwind memory(argmem: read) }

!llvm.module.flags = !{!0, !1, !2}

!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{!4, !4, i64 0}
!4 = !{!"any data access", !5, i64 0}
!5 = !{!"any access", !6, i64 0}
!6 = !{!"Flang Type TBAA Root"}
