1000000000000000
 994
 200385
 3842529393411
 8
 409477218238717
 2
 419477218238718
 909383000
 7
 999088000000000
 265
 415000000238718
 780869426483087
 9
 850085504652042
 567000123
 980123123123123
 409477218238719
 385925923480002
 999998169714888
 936302451686999
 114
 999999993700000
 108000000057
 409477218238716
 112
 1
 409477218238718
 999971000299999
 409477318238718
 735412349812385
 113
 999999999999999
 123830583943
 899990298504716
 936302451687000
 995
 990000000000000
 936302451687001
 999986542686123
 850085504652041

18 999999993541753
 12 941
 14 200355
 17 3842529383076
 7 7
 17 409477218238717
 2 2
 18 419466459294818
 16 909381874
 7 7
 18 999087986204952
 11 212
 18 414993991790735
 18 780869407920631
 7 7
 18 850085504652042
 16 566998782
 18 980123123116482
 18 409477218238718
 17 385925923479720
 18 999998150030846
 18 936302448662019
 11 114
 18 999999993541753
 17 107986074062
 17 409477218238710
 10 106
 1 1
 18 409477218238718
 18 999969994441746
 18 409477218238718
 18 735409591249436
 10 113
 18 999999993541753
 17 123830561521
 18 899973747835553
 18 936302448662019
 12 995
 18 989983621692990
 18 936302448662019
 18 999969994441746
 18 850085504650655

#include <bits/stdc++.h>
using namespace std;
const int INF = (int)2e9;
const long long INFL = (long long)9e18;
const int MAXINT = ((~0) ^ (1 << 31));
const long long MAXLL = ((~0) ^ ((long long)1 << 63));
template <class T>
inline T pow2(T a) {
  return a * a;
}
template <class T>
inline bool mineq(T& a, T b) {
  return (a > b) ? (a = b, true) : false;
}
template <class T>
inline bool maxeq(T& a, T b) {
  return (a < b) ? (a = b, true) : false;
}
long long find_last(long long n) {
  long long sq = pow(n, 1.0 / 3);
  sq = max(1ll, sq - 10);
  while (sq * sq * sq <= n) sq++;
  return sq - 1;
}
const int maxn = 1e5 + 100;
pair<long long, long long> sdp[maxn], sdpkhafan[maxn];
bool mdpkhafan[maxn];
pair<long long, long long> dp(long long n) {
  if (n == 0) return make_pair(0, 0);
  if (n == 1) return make_pair(1, 1);
  if (n == 2) return make_pair(2, 2);
  long long k = find_last(n);
  long long tof = find_last(n + 1);
  long long tofm1 = k;
  if (tof == tofm1 + 1 && mdpkhafan[tof]) return sdpkhafan[tof];
  if (tof == tofm1 + 1) mdpkhafan[tof] = true;
  k = k * k * k;
  pair<long long, long long> tmp = dp(k - 1), ret;
  long long blocks_f = n / k;
  long long blocks_c = (n + k - 1) / k;
  if (tmp.second > n % k)
    ret = make_pair(tmp.first + blocks_f - 1, tmp.second + k * (blocks_f - 1));
  else
    ret = make_pair(tmp.first + blocks_c - 1, tmp.second + k * blocks_f);
  tmp = dp(n % k);
  if (tmp.first + blocks_f >= ret.first)
    ret = make_pair(tmp.first + blocks_f, tmp.second + k * blocks_f);
  if (n % k == 0 && ret.first <= n / k) ret = make_pair(n / k, n);
  if (tof == tofm1 + 1) sdpkhafan[tof] = ret;
  return ret;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long n;
  cin >> n;
  pair<long long, long long> ans = dp(n);
  cout << ans.first << " " << ans.second << endl;
}
