let m = 1000000007
let ( +^ ) x y = (x + y) mod m

module StringMap = Map.Make (String)

let () = Scanf.scanf "%d" @@ fun n ->
  let dp = Array.make (n + 1) StringMap.empty in
  dp.(3) <-
    List.fold_left (List.fold_left (List.fold_left (List.fold_left (fun m s -> StringMap.add s 1 m)))) StringMap.empty @@
    List.map (fun c1 ->
      List.map (fun c2 ->
        List.map (fun c3 ->
          if
            c1 = 'A' && c2 = 'G' && c3 = 'C' ||
            c1 = 'A' && c3 = 'G' && c2 = 'C' ||
            c2 = 'A' && c1 = 'G' && c3 = 'C'
          then []
          else [String.init 3 (function 0 -> c1 | 1 -> c2 | 2 -> c3)])
      ['A'; 'C'; 'G'; 'T']) ['A'; 'C'; 'G'; 'T']) ['A'; 'C'; 'G'; 'T'];
  for i = 4 to n do
    dp.(i) <- StringMap.fold (fun s n ->
      List.fold_right (fun c m ->
        if 
          s.[1] = 'A' && s.[2] = 'G' && c = 'C' ||
          s.[0] = 'A' && s.[2] = 'G' && c = 'C' ||
          s.[2] = 'A' && s.[1] = 'G' && c = 'C' ||
          s.[0] = 'A' && s.[1] = 'G' && c = 'C' ||
          s.[1] = 'A' && c = 'G' && s.[2] = 'C'
        then m
        else
          let s' = String.sub s 1 2 ^ String.make 1 c in
          StringMap.add s' (n +^ try StringMap.find s' m with Not_found -> 0) m) ['A'; 'C'; 'G'; 'T']) dp.(i - 1) StringMap.empty
  done;
  Printf.printf "%d\n" @@ StringMap.fold (fun _ -> ( +^ )) dp.(n) 0
