P30123 积木塔
提高
题目描述

题目背景

大豆是一个热爱算法竞赛的 OIer,同时也是一个手工达人。最近他买了一大堆长 \(3\) 单位、宽 \(1\) 单位、高 \(1\) 单位的长方体积木。
这些积木的摆放方式只有两种:

  1. 横放:占据 \(3 \times 1\) 的空间(覆盖整个宽度,高度为 \(1\))。
  2. 竖放:占据 \(1 \times 3\) 的空间(宽度为 \(1\),高度为 \(3\))。由于塔的宽度是 \(3\),竖放的积木必须一次性并排摆放 \(3\) 个,才能刚好填满一层的宽度。

看着这些积木,大豆突发奇想:如果我要在桌面上搭一个宽 \(3\) 单位、深 \(1\) 单位、高 \(n\) 单位的塔,并且积木可以横放也可以竖放,那么一共有多少种不同的搭建方案呢?

下图为\(n=10\)时的一种搭建方案:
image

现在大豆的野心更大了:\(n\) 可能是一个任意大的无符号整数(unsigned long long 范围)。你能帮他算出方案数吗?由于答案可能极其巨大,只需要输出答案对 \(10^9+7\) 取模的结果。

输入格式

输入一行一个无符号整数 \(n\)。
\[ 0 \le n \le 2^{64}-1 \]
即 \(n\) 可以取任意 unsigned long long 范围内的值。

输出格式

输出一行一个整数,表示搭建高度为 \(n\) 的塔的方案数对 \(10^9+7\) 取模的结果。

样例输入
10
样例输出
28