天天看点

CodeForces 166E Tetrahedron

Description

You are given a tetrahedron. Let's mark its vertices with letters A, B, C and D

CodeForces 166E Tetrahedron

An ant is standing in the vertex D

You do not have to do much to solve the problem: your task is to count the number of ways in which the ant can go from the initial vertex D to itself in exactly n steps. In other words, you are asked to find out the number of different cyclic paths with the length of nfrom vertex D to itself. As the number can be quite large, you should print it modulo 1000000007 (109 + 7).

Input

The first line contains the only integer n (1 ≤ n ≤ 107) — the required length of the cyclic path.

Output

Print the only integer — the required number of ways modulo 1000000007 (109 + 7).

Sample Input

Input

2

Output

3

Input

4

Output

21

Hint

The required paths in the first sample are:

  • D - A - D
  • D - B - D
  • D - C - D

简单的递推。

#include<iostream>  
#include<algorithm>
#include<math.h>
#include<cstdio>
#include<string>
#include<string.h>
using namespace std;
const int maxn = 10000005;
int n, i, j, k, f[maxn][4];

int main(){
  while (~scanf("%d", &n))
  {
    memset(f, 0, sizeof(f));
    f[0][0] = 1;
    for (i = 1; i <= n;i++)
      for (j = 0; j < 4;j++)
        for (k = 0; k < 4;k++)
          if (j != k) { 
            f[i][j] += f[i - 1][k]; 
            f[i][j] %= 1000000007;
          }
    printf("%d\n", f[n][0]);
  }
  return 0;
}