2018-09-30 23:01:58 +01:00
---
id: 5900f4b11000cf542c50ffc3
title: 'Problem 324: Building a tower'
2020-11-27 19:02:05 +01:00
challengeType: 5
2019-08-05 09:17:33 -07:00
forumTopicId: 301981
2021-01-13 03:31:00 +01:00
dashedName: problem-324-building-a-tower
2018-09-30 23:01:58 +01:00
---
2020-11-27 19:02:05 +01:00
# --description--
2021-07-29 20:59:06 +02:00
Let $f(n)$ represent the number of ways one can fill a $3× 3× n$ tower with blocks of $2× 1× 1$. You're allowed to rotate the blocks in any way you like; however, rotations, reflections etc of the tower itself are counted as distinct.
2020-11-27 19:02:05 +01:00
2021-07-29 20:59:06 +02:00
For example (with $q = 100\\,000\\,007$):
2018-09-30 23:01:58 +01:00
2021-07-29 20:59:06 +02:00
$$\begin{align}
& f(2) = 229, \\\\
& f(4) = 117\\,805, \\\\
& f(10)\bmod q = 96\\,149\\,360, \\\\
& f({10}^3)\bmod q = 24\\,806\\,056, \\\\
& f({10}^6)\bmod q = 30\\,808\\,124.
\end{align}$$
Find $f({10}^{10000})\bmod 100\\,000\\,007$.
2018-09-30 23:01:58 +01:00
2020-11-27 19:02:05 +01:00
# --hints--
2018-09-30 23:01:58 +01:00
2021-07-29 20:59:06 +02:00
`buildingTower()` should return `96972774` .
2018-09-30 23:01:58 +01:00
2020-11-27 19:02:05 +01:00
```js
2021-07-29 20:59:06 +02:00
assert.strictEqual(buildingTower(), 96972774);
2018-09-30 23:01:58 +01:00
```
2020-11-27 19:02:05 +01:00
# --seed--
2018-09-30 23:01:58 +01:00
2020-11-27 19:02:05 +01:00
## --seed-contents--
2018-09-30 23:01:58 +01:00
```js
2021-07-29 20:59:06 +02:00
function buildingTower() {
2020-09-15 09:57:40 -07:00
2018-09-30 23:01:58 +01:00
return true;
}
2021-07-29 20:59:06 +02:00
buildingTower();
2018-09-30 23:01:58 +01:00
```
2020-11-27 19:02:05 +01:00
# --solutions--
2018-09-30 23:01:58 +01:00
```js
// solution required
```