#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int> pi;
#define f first
#define s second
#define FAST ios_base::sync_with_stdio(0); cin.tie(0);
#define all(x) x.begin(),x.end()
typedef pair<int, pi> pii;

const int maxn = 10000;
const int INF = LLONG_MAX/2;

int n,K,mod;
int dp[110][510000];

int32_t main() {
	FAST
	cin >> n >> K >> mod;
	
	int maxv = K * n * (n + 1) / 2;

	dp[0][0] = 1;
	for (int i = 1; i <= n; i++) {
		vector <int> temp(i+1,0);
		int s = 0;

		for (int sum = 0; sum <= maxv; sum++) {
			while (s < sum - i * K) {
				int indx = s % i;
				temp[indx] = (temp[indx] - dp[i-1][s] + mod) % mod;
				s++;
			}
			
			int indx = sum % i;
			temp[indx] = (temp[indx] + dp[i-1][sum]) % mod;
			dp[i][sum] = (dp[i][sum] + temp[indx]) % mod;
		}
	}
	
	for (int avg = 1; avg <= n; avg++) {
		int ans = 0;
		for (int sum = 0; sum <= maxv; sum++) {
			ans += (dp[avg - 1][sum] * dp[n - avg][sum]) % mod;
			ans %= mod;
		}
		ans = (ans * (K+1)) % mod;
		ans = (ans - 1 + mod) % mod;
		cout << ans << "\n";
	}
	
}








#include <bits/stdc++.h>

const long long INF = 1e9;
const long long MOD = 1e9 + 7;
//const long long MOD = 998244353;
const long long LINF = 1e18;
using namespace std;

#define YES(n) cout << ((n) ? "YES" : "NO"  ) << endl
#define Yes(n) cout << ((n) ? "Yes" : "No"  ) << endl
#define POSSIBLE(n) cout << ((n) ? "POSSIBLE" : "IMPOSSIBLE"  ) << endl
#define Possible(n) cout << ((n) ? "Possible" : "Impossible"  ) << endl
#define dump(x)  cout << #x << " = " << (x) << endl
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) for(int i=0;i<(n);++i)
#define REPR(i,n) for(int i=n;i>=0;i--)
#define COUT(x) cout<<(x)<<endl
#define SCOUT(x) cout<<(x)<<" "
#define VECCOUT(x) for(auto&youso_: (x) )cout<<right<<setw(1)<<youso_<<" ";cout<<endl
#define ENDL cout<<endl
#define CIN(...) int __VA_ARGS__;CINT(__VA_ARGS__)
#define LCIN(...) long long __VA_ARGS__;CINT(__VA_ARGS__)
#define SCIN(...) string __VA_ARGS__;CINT(__VA_ARGS__)
#define VECCIN(x) for(auto&youso_: (x) )cin>>youso_
#define mp make_pair
#define PQ priority_queue<long long>
#define PQG priority_queue<long long,V,greater<long long>>


typedef long long ll;
typedef vector<long long> vl;
typedef vector<long long> vi;
typedef vector<bool> vb;
typedef vector<char> vc;
typedef vector<vl> vvl;
typedef vector<vi> vvi;
typedef vector<vb> vvb;
typedef vector<vc> vvc;
typedef pair<long long, long long> pll;


#define COUT(x) cout<<(x)<<endl
void CINT(){}
template <class Head,class... Tail>
void CINT(Head&& head,Tail&&... tail){
    cin>>head;
    CINT(move(tail)...);
}
template<class T>
void mod(T &x) {
    x %= MOD;
    x += MOD;
    x %= MOD;
}

ll GCD(ll a, ll b) {
    if(b == 0) return a;
    else return GCD(b, a%b);
}

struct COMB{
    vl fact, fact_inv, inv;
    void init_nCk(long long SIZE) {
        fact.resize(SIZE + 5);
        fact_inv.resize(SIZE + 5);
        inv.resize(SIZE + 5);
        fact.at(0) = fact.at(1) = fact_inv.at(0) = fact_inv.at(1) = inv.at(1) = 1;
        for(long long i = 2; i < SIZE + 5; i++) {
            fact.at(i) = fact.at(i - 1)*i%MOD;
            inv.at(i) = MOD - inv.at(MOD%i)*(MOD/i)%MOD;
            fact_inv.at(i) = fact_inv.at(i - 1)*inv.at(i)%MOD;
        }
    }
    long long nCk (long long n, long long k) {
        assert(!(n < k));
        assert(!(n < 0 || k < 0));
        return fact.at(n)*(fact_inv.at(k)*fact_inv.at(n - k)%MOD)%MOD;
    }
};
ll extGCD(ll a, ll b, ll &x, ll &y) {
    if(b == 0) {
        x = 1;
        y = 0;
        return a;
    }
    ll d = extGCD(b, a%b, y, x);
    y -= a/b*x;
    return d;
}


void Main() {
    LCIN(N);
    vl fib(92, 1);
    for(int i = 2; i < 92; i++) {
        fib.at(i) = fib.at(i - 1) + fib.at(i - 2);
    }
    vl fibs(92, 1);
    ll memo = N;
    for(int i = 0; i < 92; i++) {
        int j = 91 - i;
        fibs.at(j) = N/fib.at(j);
        N %= fib.at(j);
    }
    vl fibsc(30, 1);
    for(int i = 0; i < 30; i++) {
        fibsc.at(i) = i;
    }
//    VECCOUT(fibsc);
//    VECCOUT(fibs);
    queue<int> ans;
    bool c = 0;
    int KKK = 1;
    for(int i = 1; i < 92 - KKK; i++) {
        int j = 91 - i;
        if(fibs.at(j) && c) {
            ans.push(2 - (i)%2);
        }
        if(c) {
            ans.push(4 - (i + 1)%2);
        }
        if(fibs.at(j) && !c) {
            ans.push(1);
            ans.push(2);
            c = 1;
        }
    }
    cout << ans.size() << endl;
    while(ans.size()) {
        ll tmp = ans.front();
        ll res = tmp;
        cout << res << endl;
        ans.pop();
    }

}

int main() {
    cout << fixed << setprecision(15);
    Main();
    return 0;
}
