#include<bits/stdc++.h>
#define file "fibosum"
using namespace std;
#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define vii vector<vector<int>>
const int N=1e6+5;
const int NN=1e3+9;
const int MOD=1e9+7;
const int INF=1e18;
int n;
vii dp(4, vector<int> (4, 0));
int nhan(int a, int b) {
if (b==0) return 0;
if (b==1) return a;
int tmp=nhan(a,b/2)%MOD;
if (b&1)
return (((tmp+tmp)%MOD)+a)%MOD;
return (tmp+tmp)%MOD;
}
vii mul(const vii& a, const vii& b) {
vii res(4, vector<int> (4, 0));
for (int i=1;i<=3;i++)
for (int j=1;j<=3;j++)
for (int k=1;k<=3;k++) {
res[i][j]+=(nhan(a[i][k],b[k][j]))%MOD;
res[i][j]%=MOD;
}
return res;
}
void inkq(const vii& a) {
for (int i=1;i<=3;i++) {
for (int j=1;j<=3;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
vii pow(const vii& a, int b) {
if (b==1) return a;
vii tmp=pow(a,b/2);
if (b&1)
return mul(mul(tmp,tmp),a);
return mul(tmp,tmp);
}
void process() {
cin>>n;
vii t(4, vector<int> (4, 0));
t={
{0, 0, 0, 0},
{0, 1, 1, 1},
{0, 0, 1, 1},
{0, 0, 1, 0}
};
dp=pow(t,n+1);
// inkq(dp);
cout<<dp[1][3];
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
int t=1;
// cin>>t;
while (t--)
process();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmaWxlICJmaWJvc3VtIgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBYIGZpcnN0CiNkZWZpbmUgWSBzZWNvbmQKI2RlZmluZSB2aWkgdmVjdG9yPHZlY3RvcjxpbnQ+PgoKY29uc3QgaW50IE49MWU2KzU7CmNvbnN0IGludCBOTj0xZTMrOTsKY29uc3QgaW50IE1PRD0xZTkrNzsKY29uc3QgaW50IElORj0xZTE4OwoKaW50IG47CnZpaSBkcCg0LCB2ZWN0b3I8aW50PiAoNCwgMCkpOwoKaW50IG5oYW4oaW50IGEsIGludCBiKSB7CiAgICBpZiAoYj09MCkgcmV0dXJuIDA7CiAgICBpZiAoYj09MSkgcmV0dXJuIGE7CiAgICBpbnQgdG1wPW5oYW4oYSxiLzIpJU1PRDsKICAgIGlmIChiJjEpCiAgICAgICAgcmV0dXJuICgoKHRtcCt0bXApJU1PRCkrYSklTU9EOwogICAgcmV0dXJuICh0bXArdG1wKSVNT0Q7Cn0KCnZpaSBtdWwoY29uc3QgdmlpJiBhLCBjb25zdCB2aWkmIGIpIHsKICAgIHZpaSByZXMoNCwgdmVjdG9yPGludD4gKDQsIDApKTsKICAgIGZvciAoaW50IGk9MTtpPD0zO2krKykKICAgIGZvciAoaW50IGo9MTtqPD0zO2orKykKICAgIGZvciAoaW50IGs9MTtrPD0zO2srKykgewogICAgICAgIHJlc1tpXVtqXSs9KG5oYW4oYVtpXVtrXSxiW2tdW2pdKSklTU9EOwogICAgICAgIHJlc1tpXVtqXSU9TU9EOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKdm9pZCBpbmtxKGNvbnN0IHZpaSYgYSkgewogICAgZm9yIChpbnQgaT0xO2k8PTM7aSsrKSB7CiAgICAgICAgZm9yIChpbnQgaj0xO2o8PTM7aisrKQogICAgICAgICAgICBjb3V0PDxhW2ldW2pdPDwiICI7CiAgICAgICAgY291dDw8ZW5kbDsKICAgIH0KfQoKdmlpIHBvdyhjb25zdCB2aWkmIGEsIGludCBiKSB7CiAgICBpZiAoYj09MSkgcmV0dXJuIGE7CiAgICB2aWkgdG1wPXBvdyhhLGIvMik7CiAgICBpZiAoYiYxKQogICAgICAgIHJldHVybiBtdWwobXVsKHRtcCx0bXApLGEpOwogICAgcmV0dXJuIG11bCh0bXAsdG1wKTsKfQoKdm9pZCBwcm9jZXNzKCkgewogICAgY2luPj5uOwogICAgdmlpIHQoNCwgdmVjdG9yPGludD4gKDQsIDApKTsKICAgIHQ9ewogICAgICAgIHswLCAwLCAwLCAwfSwKICAgICAgICB7MCwgMSwgMSwgMX0sCiAgICAgICAgezAsIDAsIDEsIDF9LAogICAgICAgIHswLCAwLCAxLCAwfQogICAgfTsKICAgIGRwPXBvdyh0LG4rMSk7Ci8vICAgIGlua3EoZHApOwogICAgY291dDw8ZHBbMV1bM107Cn0KCnNpZ25lZCBtYWluKCkgewogICAgY2luLnRpZSgwKS0+c3luY193aXRoX3N0ZGlvKDApOwoKICAgIGludCB0PTE7Ci8vICAgIGNpbj4+dDsKICAgIHdoaWxlICh0LS0pCiAgICAgICAgcHJvY2VzcygpOwogICAgcmV0dXJuIDA7Cn0K