// ACM-ICPC国内予選2010 C. ポロック予想 #include using namespace std; int main(){ int N; int tri[200]; static int ansA[1000000], ansB[1000000]; for(int i=0;i<200;i++) tri[i] = i*(i+1)*(i+2)/6; ansA[0] = ansB[0] = 0; for(int i=1;i<1000000;i++){ ansA[i] = ansB[i] = i; for(int j=0;i-tri[j]>=0;j++){ ansA[i] = min(ansA[i], ansA[i-tri[j]]+1); if(tri[j]%2==1) ansB[i] = min(ansB[i], ansB[i-tri[j]]+1); } } while(cin >> N, N) cout << ansA[N] << " " << ansB[N] << endl; }