#include
#include
#include
using namespace std;
typedef long long ll;
typedef vector> matrix;
typedef vector> d_matrix;
const int maxn = 1e5 + 10;
const int INF = 2e9;
const ll MOD = 100000007;
class StairsToRazorTower
{
public:
matrix multiply_two_matrices(matrix A, matrix B) {
int n_a = (int) A.size(), m_a = (int) A[0].size();
int n_b = (int) B.size(), m_b = (int) B[0].size();
if(m_a != n_b) {
return {{0}};
}
matrix res(n_a, vector(m_b, 0));
for(int i = 0; i < n_a; i++) {
for(int j = 0; j < m_b; j++) {
ll c = 0;
for(int k = 0; k < n_a; k++) {
c += (A[i][k] * B[k][j]) % MOD;
c %= MOD;
}
res[i][j] = c % MOD;
}
}
return res;
}
ll nth_fibbonaci_number(ll x) {
matrix A = {
{1, 0, 1},
{1, 0, 0},
{0, 1, 0}
};
matrix B = A;
// for(int i = 0; i < x; i++) {
// A = multiply_two_matrices(A, B);
// }
matrix res = {
{1, 0, 0,},
{0, 1, 0},
{0, 0, 1}
};
while(x) {
if(x % 2 == 1) {
res = multiply_two_matrices(res, A);
}
A = multiply_two_matrices(A, A);
x /= 2;
}
return res[0][0];
}
ll getNumberOfWays( ll n )
{
return nth_fibbonaci_number(n);
}
};
int main() {
// nth_fibbonaci_number(8);
// return 0;
StairsToRazorTower s;
for(int i = 1; i <= 10; i++) {
cout << s.getNumberOfWays(969710026) << " ";
}
return 0;
}