#include<bits/stdc++.h>
using namespace std;
vector<int> v;
int f[100010];
int dfs(int k) {
int sq = sqrt(k);
if (f[k] != 0) {
return f[k];
}
if (sq * sq == k) {
return f[k] = 1;
}
int res = INT_MAX;
for (int i = 0; i < v.size() && v[i] <= k; i++) {
res += min(res, dfs(v[i]) + dfs(k - v[i]));
}
return f[k] = res;
}
int main() {
int n;
for (int i = 1; i * i <= 100000; i++) {
v.push_back(i*i);
}
cin >> n;
cout << dfs(n);
return 0;
}