func_code_string: #include <bits/stdc++.h>   using namespace std;   class base {    public:     long double a, b;     base(void) {       a = 0;       b = 0;     }     base(long double _a, long double _b) {       a = _a;       b = _b;     }     base(long double _a) {       a = _a;       b = 0;     }     base operator*(const base& b2) {       base ret(a * b2.a - b * b2.b, b * b2.a + a * b2.b);       return ret;     }     base operator+(const base& b2) {       base ret(a + b2.a, b + b2.b);       return ret;     }     base operator-(const base& b2) {       base ret(a - b2.a, b - b2.b);       return ret;     }     base operator/(const base& b2) {       long double c = b2.a, d = b2.b;       base ret((a * c + b * d) / (c * c + d * d),                (b * c - a * d) / (c * c + d * d));       return ret;     }     void operator*=(const base& b2) {       long double tmp = a * b2.a - b * b2.b;       b = b * b2.a + a * b2.b;       a = tmp;     }     void operator/=(const base& b2) {       long double c = b2.a, d = b2.b;       long double tmp = (a * c + b * d) / (c * c + d * d);       b = (b * c - a * d) / (c * c + d * d);       a = tmp;     }     inline long double real(void) { return a; }   };   void fft(vector<base>& a, bool invert) {     int n = (int)a.size();     for (int i = 1, j = 0; i < n; ++i) {       int bit = n >> 1;       for (; j >= bit; bit >>= 1) j -= bit;       j += bit;       if (i < j) swap(a[i], a[j]);     }     base ww[n];     long double ang = 2 * 3.14159265358979323846l / n * (invert ? -1 : 1);     base wi(cos(ang), sin(ang));     ww[0] = 1;     for (int i = 1; i < n; i++) {       ww[i] = ww[i / 2] * ww[i / 2];       if (i % 2 == 1) ww[i] *= wi;     }     for (int len = 2; len <= n; len <<= 1) {       int k = n / len;       for (int i = 0; i < n; i += len) {         int wn = 0;         for (int j = 0; j < len / 2; ++j) {           base u = a[i + j], v = a[i + j + len / 2] * ww[wn];           a[i + j] = u + v;           a[i + j + len / 2] = u - v;           wn += k;         }       }     }     if (invert)       for (int i = 0; i < n; ++i) a[i] /= n;   }   vector<int> multiply(const vector<int>& a, const vector<int>& b) {     vector<base> fa(a.begin(), a.end());     size_t n = 1;     while (n < (a.size() + b.size())) n <<= 1;     fa.resize(n);     vector<int> res;     fft(fa, false);     for (size_t i = 0; i < n; ++i) fa[i] *= fa[i];     fft(fa, true);     res.resize(n);     long long int carry = 0;     for (size_t i = 0; i < n; ++i) {       carry += (long long int)(fa[i].real() + 0.5);       res[i] = carry % 1000;       carry /= 1000;     }     int i;     for (i = n - 1; i > 0; i--) {       if (res[i] != 0) break;     }     res.resize(i + 1);     return res;   }   void small_mult(vector<int>& a, int b) {     int carry = 0;     for (int i = 0; i < (int)a.size() || carry; i++) {       if (i == (int)a.size()) a.push_back(0);       int cur = carry + a[i] * b;       a[i] = cur % 1000;       carry = cur / 1000;     }     while (a.size() > 1 && !a.back()) a.pop_back();   }   void fast_3_pow(long long int k, vector<int>& ans) {     ans = {1};     if (k <= 0) return;     long long int r = 0, kk = 0;     for (long long int t = k; t > 0; t /= 2) {       r = (2 * r + t % 2);       kk++;     }     for (long long int i = 0; i < kk; i++) {       ans = multiply(ans, ans);       if (r % 2) small_mult(ans, 3);       r /= 2;     }   }   bool first_is_BE(vector<int>& v1, vector<int>& v2) {     if (v1.size() > v2.size()) return 1;     if (v1.size() < v2.size()) return 0;     for (long long int i = ((long long int)v1.size()) - 1; i >= 0; i--) {       if (v1[i] > v2[i]) return 1;       if (v1[i] < v2[i]) return 0;     }     return 1;   }   int main() {     ios::sync_with_stdio(0);     string s;     cin >> s;     if (s ==  1 ) {       cout <<  1 ;       return 0;     }     if (s ==  2 ) {       cout <<  2 ;       return 0;     }     if (s ==  3 ) {       cout <<  3 ;       return 0;     }     if (s ==  4 ) {       cout <<  4 ;       return 0;     }     if (s ==  5 ) {       cout <<  5 ;       return 0;     }     if (s ==  6 ) {       cout <<  5 ;       return 0;     }     if (s ==  7 ) {       cout <<  6 ;       return 0;     }     if (s ==  8 ) {       cout <<  6 ;       return 0;     }     if (s ==  9 ) {       cout <<  6 ;       return 0;     }     vector<int> n;     int tmp = 0;     while (s.size() % 3 != 0) s =  0  + s;     for (int i = 0; i < (int)s.size(); i++) {       tmp *= 10;       tmp += s[i] -  0 ;       if ((i + 1) % 3 == 0) {         n.push_back(tmp);         tmp = 0;       }     }     reverse(n.begin(), n.end());     vector<int> v1, vt;     int k;     k = max((int)(s.size() * logl(10) / logl(3) - 8), (int)0);     fast_3_pow(k, v1);     vt = v1;     small_mult(v1, 4);     while (1) {       if (first_is_BE(v1, n)) {         break;       }       k++;       small_mult(v1, 3);     }     int ans3 = 3 * k + 4;     k = max((int)(s.size() * logl(10) / logl(3) - 8), (int)0);     v1 = vt;     while (1) {       if (first_is_BE(v1, n)) {         break;       }       k++;       small_mult(v1, 3);     }     int ans1 = 3 * k;     k = max((int)(s.size() * logl(10) / logl(3) - 8), (int)0);     v1 = vt;     small_mult(v1, 2);     while (1) {       if (first_is_BE(v1, n)) {         break;       }       k++;       small_mult(v1, 3);     }     int ans2 = 3 * k + 2;     cout << min(min(ans1, ans2), ans3);     return 0;   }   