#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 数列クラス
class Nums
{
protected:
vector<int> Elems;
public:
Nums(const unsigned int n) {
Set(n);
}
void Set(const unsigned int n) {
for (unsigned int i=Elems.size(); i<=n; i++) {
Push(i);
}
}
virtual void Push(unsigned int i) {};
int operator[](unsigned int k) {
if (k >= Elems.size()) {
Set(k);
}
return Elems[k];
}
};
// Fibonacci数列
class ANums : public Nums
{
public:
ANums() : Nums(10) {
Elems.push_back(1);
Elems.push_back(1);
}
void Push(unsigned int i) {
Elems.push_back(Elems[i-1] + Elems[i-2]);
}
};
// 数列b
class BNums : public Nums
{
private:
ANums A;
public:
BNums(unsigned int m) : Nums(10), A() {
Elems.push_back(m-1);
}
void Push(unsigned int i) {
Elems.push_back(static_cast<int>(ceil(static_cast<double>(Elems[i-1]) * A[i-1] / (A[i-1] + A[i]))));
}
};
// 数列c
class CNums : public Nums
{
private:
BNums B;
public:
CNums(unsigned int m) : Nums(10), B(m) {
Elems.push_back(m-1);
}
void Push(unsigned int i) {
Elems.push_back(Elems[i-1] + ((i%2)?-1:1)*(B[i] - 1));
}
};
int main()
{
const int num = 7110;
// 数列cを定義
CNums c(num);
// 収束するまで計算
int i;
for (i=1; c[i] != c[i-1]; i++);
// 書き出し
int a = c[i], b = num, k = 0;
while (a > 0 && b > 0) {
if (k%2) {
cout << a << endl;
a -= b;
} else {
cout << b << endl;
b -= a;
}
k++;
}
return 0;
}