Kolya loves putting gnomes at the circle table and giving them coins, and Tanya loves studying triplets of gnomes, sitting in the vertexes of an equilateral triangle.
More formally, there are 3n gnomes sitting in a circle. Each gnome can have from1 to3 coins. Let's number the places in the order they occur in the circle by numbers from0 to3n - 1, let the gnome sitting on thei-th place haveai coins. If there is an integeri (0 ≤ i < n) such thatai + ai + n + ai + 2n ≠ 6, then Tanya is satisfied.
Count the number of ways to choose ai so that Tanya is satisfied. As there can be many ways of distributing coins, print the remainder of this number modulo109 + 7. Two ways, a and b, are considered distinct if there is indexi (0 ≤ i < 3n), such thatai ≠ bi (that is, some gnome got different number of coins in these two ways).
Input
A single line contains number n (1 ≤ n ≤ 105) — the number of the gnomes divided by three.
Output
Print a single number — the remainder of the number of variants of distributing coins that satisfy Tanya modulo109 + 7.
Sample Input
1
20
2
680
Sample Output
Hint
20 ways for n = 1 (gnome with index0 sits on the top of the triangle, gnome1 on the right vertex, gnome 2 on the left vertex):
思路:这道题感觉不难啊,想了好久(蒟蒻的智商羁绊),看代码的递推公式吧;
#include<cstdio>
#include<cstring>
#define t 1000000007
#define ll long long
ll sdp(ll a,ll b,ll c)
{
ll ans=1;
while(b)
{
if(b&1)
ans=ans*a%c;
a=a*a%c;
b>>=1;
}
return ans;
}
int main()
{
ll m,n,to,tot;
while(scanf("%lld",&n)!=EOF)
{
m=n*3;
to=sdp(3,m,t);
tot=sdp(7,n,t);
if(to>=tot)
printf("%lld\n",to-tot);
else printf("%lld\n",to-tot+t);
}
return 0;
}