program traukinys;
{ 105 u‘davinys, 1 b–das }
  const MAX_N = 43;
  type vagonas = (kel, res);
       lentele = array [1..MAX_N] of record
                                       kele, rest: longint;
                                     end;

  function vagonai (n: integer): longint;
    var viso, i: longint;
        v: lentele;
        { v[i].kele - keliais b–dais galima suformuoti s…stat… iž i vagon—, }
        { jei s…statas prasideda keleiviniu vagonu }
        { s…statas formuojamas tik iž keleivini— ir restoran— vagon— }

   function form (m: longint; { formuojamo s…stato ilgis }
                  pirm: vagonas { pirmojo vagono tipas }): longint;
   { funkcijos rezultatas - v[m].kele reikžm‚, jei pirm = kel }
   { arba v[i].rest priežingu atveju }
   { žia reikžme funkcija papildo lentelŠ }
       var kiek: longint;
    begin
      { gal b–t reikiamos reikžm‚s jau apskai‡iuotos }
      if (pirm = kel) and (v[m].kele <> -1)
      then form := v[m].kele
      else if (pirm = res) and (v[m].rest <> -1)
           then form := v[m].kele
           else begin
                  { po keleivinio vagono gali eiti arba keleivinis }
                  if v[m-1].kele = -1
                     then kiek := form (m-1, kel)
                     else kiek := v[m-1].kele;
                  { arba vagonas-restoranas }
                  if (m >= 3) and (pirm = kel)
                     then if v[m-1].rest = -1
                          then kiek := kiek + form (m-1, res)
                          else kiek := kiek + v[m-1].rest;
                  { papildome lentelŠ }
                  if pirm = kel
                     then v[m].kele := kiek
                     else v[m].rest := kiek;
                  form := kiek;
              end;
    end; { form }

  begin
    for i := 1 to n do
      begin
        v[i].kele := -1;  { s…statai dar nesuformuoti }
        v[i].rest := -1;
      end;
    v[1].kele := 1;
    v[1].rest := 0; { s…statas negali prasid‚ti restoranu }
    if n > 1
       then viso := form (n, kel)
       else viso := 1;
    { n‚ra nei vieno prekinio ar pažto vagono }
    if n > 1 then viso := viso + 2 * v[n-1].kele;
    if n > 2 then viso := viso + 3 * v[n-2].kele;
    if n > 3 then viso := viso + 3 * v[n-3].kele;
    if n > 4 then viso := viso + 2 * v[n-4].kele;
    if n > 5 then viso := viso + v[n-5].kele;
   vagonai := viso
  end; { vagonai }

  var n: longint;
begin
  readln (n);
  writeln (vagonai(n));
end.
