using
System;
class
GfG {
static
int
MOD = 1000000009;
static
int
power(
int
n)
{
if
(n <= 1) {
return
1;
}
n--;
int
[, ] res = { { 1, 0 }, { 0, 1 } };
int
[, ] tMat = { { 2, 3 }, { 1, 0 } };
while
(n > 0) {
if
(n % 2 == 1) {
int
[, ] tmp =
new
int
[2, 2];
tmp[0, 0] = (res[0, 0] * tMat[0, 0]
+ res[0, 1] * tMat[1, 0])
% MOD;
tmp[0, 1] = (res[0, 0] * tMat[0, 1]
+ res[0, 1] * tMat[1, 1])
% MOD;
tmp[1, 0] = (res[1, 0] * tMat[0, 0]
+ res[1, 1] * tMat[1, 0])
% MOD;
tmp[1, 1] = (res[1, 0] * tMat[0, 1]
+ res[1, 1] * tMat[1, 1])
% MOD;
res[0, 0] = tmp[0, 0];
res[0, 1] = tmp[0, 1];
res[1, 0] = tmp[1, 0];
res[1, 1] = tmp[1, 1];
}
n = n / 2;
int
[, ] tmp1 =
new
int
[2, 2];
tmp1[0, 0] = (tMat[0, 0] * tMat[0, 0]
+ tMat[0, 1] * tMat[1, 0])
% MOD;
tmp1[0, 1] = (tMat[0, 0] * tMat[0, 1]
+ tMat[0, 1] * tMat[1, 1])
% MOD;
tmp1[1, 0] = (tMat[1, 0] * tMat[0, 0]
+ tMat[1, 1] * tMat[1, 0])
% MOD;
tmp1[1, 1] = (tMat[1, 0] * tMat[0, 1]
+ tMat[1, 1] * tMat[1, 1])
% MOD;
tMat[0, 0] = tmp1[0, 0];
tMat[0, 1] = tmp1[0, 1];
tMat[1, 0] = tmp1[1, 0];
tMat[1, 1] = tmp1[1, 1];
}
return
(res[0, 0] * 1 + res[0, 1] * 1) % MOD;
}
public
static
void
Main()
{
int
n = 3;
Console.WriteLine(power(n));
}
}