#include int sankaku(int k) { int num = k * (k + 1) / 2; return num; } int main(void) { int N; int tri[10000]; int tri1, tri2; int l = 0; int k = 0; int m = 0; scanf("%d", &N); tri[0] = 0; for (int j = 1; tri[j-1] < 10000000; j++) { tri[j] = sankaku(j); } //1つか2つの三角数のどちらであるかを判定 do{ k++; tri1 = tri[k]; if (N == tri1) { printf("1\n"); return 1; } }while (N > tri1); do{ l++; m = l-1; do{ m++; tri2 = tri[l] + tri[m]; if (N == tri2) { printf("2\n"); return 2; } } while (N > tri2); }while(N > tri[l]); printf("3\n"); return 0; }