long long intPart(int n, long long *P = P) { if(n == 0) return (P[0] = 1); if(n == 1) return (P[1] = 1); if(!P[n]) for(int k = 1; (k * (3 * k - 1)) / 2 <= n; k++) for(int i = 1; i < 4 && k * (3 * k + i - 2) / 2 <= n; i += 2) P[n] += ((k & 1 ? 1: -1) * intPart(n - (k * (3 * k + i - 2) / 2), P)); return P[n]; }