#include <stdio.h>
#include <time.h>
const int m = 100000007;
static int c[m];
long inv(long a)
{
long z = 1;
for (long c, q, x, y = 0, b = m; b != 0; z = y, y = x)
c = a - (q = a/b) * b, a = b, b = c, x = z - q*y;
return (z < 0) ? (z + m) : z;
}
long b(long n, long k)
{
if (n < k) return 0;
if (n >= m) return b(n / m, k / m) * b(n % m, k % m) % m;
return inv((long)c[k] * c[n-k]) * c[n] % m;
}
long f(long n)
{
long z = n % m;
return (8 * b(n+n, n) - 7 - z - z - 3 * z * z) % m;
}
int main()
{
long z;
for (int q = 0; q < 10; q++)
{
c[0] = 1;
for (long i = 1; i < m; i++) c[i] = i * c[i-1] % m;
long v, a = 0, b = 1; z = 0;
for (int i = 2; i <= 90; ++i, a = b, b = v)
z = (z + f(v = a + b)) % m;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx0aW1lLmg+Cgpjb25zdCBpbnQgbSA9IDEwMDAwMDAwNzsKc3RhdGljIGludCBjW21dOwoKbG9uZyBpbnYobG9uZyBhKQp7CiAgbG9uZyB6ID0gMTsKICBmb3IgKGxvbmcgYywgcSwgeCwgeSA9IDAsIGIgPSBtOyBiICE9IDA7IHogPSB5LCB5ID0geCkKICAgIGMgPSBhIC0gKHEgPSBhL2IpICogYiwgYSA9IGIsIGIgPSBjLCB4ID0geiAtIHEqeTsKICByZXR1cm4gKHogPCAwKSA/ICh6ICsgbSkgOiB6Owp9Cgpsb25nIGIobG9uZyBuLCBsb25nIGspCnsKICBpZiAobiA8IGspIHJldHVybiAwOwogIGlmIChuID49IG0pIHJldHVybiBiKG4gLyBtLCBrIC8gbSkgKiBiKG4gJSBtLCBrICUgbSkgJSBtOwogIHJldHVybiBpbnYoKGxvbmcpY1trXSAqIGNbbi1rXSkgKiBjW25dICUgbTsKfQoKbG9uZyBmKGxvbmcgbikKewogIGxvbmcgeiA9IG4gJSBtOwogIHJldHVybiAoOCAqIGIobituLCBuKSAtIDcgLSB6IC0geiAtIDMgKiB6ICogeikgJSBtOwp9CgppbnQgbWFpbigpCnsKICBsb25nIHo7CiAgYXV0byBzdCA9IHRpbWUoTlVMTCk7CiAgZm9yIChpbnQgcSA9IDA7IHEgPCAxMDsgcSsrKQogIHsKICAgIGNbMF0gPSAxOwogICAgZm9yIChsb25nIGkgPSAxOyBpIDwgbTsgaSsrKSBjW2ldID0gaSAqIGNbaS0xXSAlIG07CiAgICBsb25nIHYsIGEgPSAwLCBiID0gMTsgeiA9IDA7CiAgICBmb3IgKGludCBpID0gMjsgaSA8PSA5MDsgKytpLCBhID0gYiwgYiA9IHYpCiAgICAgIHogPSAoeiArIGYodiA9IGEgKyBiKSkgJSBtOwogIH0KICBhdXRvIGV0ID0gdGltZShOVUxMKTsKICBwcmludGYoIiVsZCAgJWYgbXNcbiIsICh6IDwgMCkgPyAoeiArIG0pIDogeiwgZGlmZnRpbWUoZXQsIHN0KS8xMC4wKTsKfQ==