#include <iostream>
#include <vector>
#include <stdint.h>
#include <limits>

class Collatz
{
  private:
    typedef unsigned short elem_t;
    typedef std::vector<elem_t> vector_t;
    static const elem_t MAX = 65535;
    uint64_t s;
    vector_t v;
  public:
    Collatz(vector_t::size_type s) : s(s), v(s + 1, MAX) { v[1] = 0; }
    uint64_t get_at_f(uint64_t i)
    {
      bool inrange = i <= s;
      if (inrange && (v[i] != MAX))
      {
        return v[i];
      }
      else
      {
        auto result = get_at_f( ((i % 2 == 0) ? i : 3 * i + 1) / 2 ) + 1;
        if (inrange)
        {
          v[i] = result;
        }
        return result;
      }
     }
};

int main()
{
  const std::size_t size = 1000000;
  Collatz x(size);
  uint64_t cur_max = 0;
  uint64_t cur_max_i = 0;
  for (uint64_t i = 1; i <= size; ++i)
  {
    auto result = x.get_at_f(i);
    if (result >= cur_max)
    {
      cur_max = result;
      cur_max_i = i;
    }
  }
  std::cout << cur_max_i << ' ' << cur_max << std::endl;
}