#include"bits/stdc++.h"

using namespace std;
typedef unsigned int uint;
typedef long long int ll;
typedef unsigned long long int ull;

#define debugv(v) printf("L%d %s => ",__LINE__,#v);for(auto e:v){cout<<e<<" ";}cout<<endl;
#define debugm(m) printf("L%d %s is..\n",__LINE__,#m);for(auto v:m){for(auto e:v){cout<<e<<" ";}cout<<endl;}
#define debuga(m,w) printf("L%d %s is => ",__LINE__,#m);for(int x=0;x<(w);x++){cout<<(m)[x]<<" ";}cout<<endl;
#define debugaa(m,w,h) printf("L%d %s is..\n",__LINE__,#m);for(int y=0;y<(h);y++){for(int x=0;x<(w);x++){cout<<(m)[x][y]<<" ";}cout<<endl;}
#define debugaar(m,w,h) printf("L%d %s is..\n",__LINE__,#m);for(int y=0;y<(h);y++){for(int x=0;x<(w);x++){cout<<(m)[y][x]<<" ";}cout<<endl;}
#define ALL(v) (v).begin(),(v).end()
#define BIGINT 0x7FFFFFFF
#define E107 1000000007ll
void printbit(int u) { if (u == 0)cout << 0; else { int s = 0, k = 0; for (; 0<u; u >>= 1, k++)s = (s << 1) | (u & 1); for (; 0<k--; s >>= 1)cout << (s & 1); } }

#define TIME chrono::system_clock::now()
#define MILLISEC(t) (chrono::duration_cast<chrono::milliseconds>(t).count())
namespace {
	std::chrono::system_clock::time_point t;
	void tic() { t = TIME; }
	void toc() { fprintf(stderr, "TIME : %lldms\n", MILLISEC(TIME - t)); }
	std::chrono::system_clock::time_point tle = TIME;
	void safe_tle(int msec) { assert(MILLISEC(TIME - tle) < msec); }
}

template<typename T1, typename T2>
ostream& operator <<(ostream &o, const pair<T1, T2> p) { o << "(" << p.first << ":" << p.second << ")"; return o; }

#ifndef __MAI

namespace {
	class MaiScanner {
	public:
		template<typename T>
		void input_integer(T& var) {
			var = 0;
			T sign = 1;
			int cc = getchar_unlocked();
			for (; cc<'0' || '9'<cc; cc = getchar_unlocked())
				if (cc == '-') sign = -1;
			for (; '0' <= cc&&cc <= '9'; cc = getchar_unlocked())
				var = (var << 3) + (var << 1) + cc - '0';
			var = var*sign;
		}
		void ign() { getchar_unlocked(); }
		MaiScanner& operator>>(int& var) {
			input_integer<int>(var);
			return *this;
		}
		MaiScanner& operator>>(long long& var) {
			input_integer<long long>(var);
			return *this;
		}
	};
	class MaiPrinter {
		int stack_p;
		char stack[32];
	public:
		template<typename T>
		void output_integer(T var) {
			if (var == 0) {
				putchar_unlocked('0');
				return;
			}
			if (var < 0) {
				putchar_unlocked('-');
				var = -var;
			}
			stack_p = 0;
			while (var) {
				stack[stack_p++] = '0' + (var % 10);
				var /= 10;
			}
			while (stack_p)
				putchar_unlocked(stack[--stack_p]);
		}
		MaiPrinter& operator<<(char c) {
			putchar_unlocked(c);
			return *this;
		}
		MaiPrinter& operator<<(int var) {
			output_integer<int>(var);
			return *this;
		}
		MaiPrinter& operator<<(long long var) {
			output_integer<long long>(var);
			return *this;
		}
	};
}
MaiScanner scanner;
MaiPrinter printer;

#else
#define scanner cin
#endif

void safebreak() { static auto t = TIME; assert(MILLISEC(TIME - t) < 5000); }

ll keta(ll d) {
    return d < 10 ? 1 : (keta(d / 10) + 1);
}

ll n, m;

ll f(ll a, ll b) {
    return max(keta(a), keta(b));
}

int main() {
	int i, j, k, a, b, c, d, x, y;
	
    cin >> n;

    m = (ll)sqrt(n);

    while (0 < m) {
        if (n%m == 0) {
            cout << f(m, n / m) << endl;
            return 0;
        }
        --m;
    }

    abort();

	return 0;
}

Measured memory_bytes: 256