#include<bits/stdc++.h>
using namespace std;
int main(){
  int N; cin>>N;
  
  if(N%100==0) cout<<N/100;
  else cout<<N/100+1;
  

  return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(intt i=0;i<(intt)(n);i++)
#define repm(i,n) for(intt i=(intt)(n)-1;i>=0;i--)
#define rept(i,n) for(intt i=1;i<(intt)(n);i++)
#define reptm(i,n) for(intt i=(intt)(n);i>0;i--)
#define all(x) (x).begin(),(x).end()
#define siz(s) (s).size()
#define fof(i,a,b) for(intt i=a;i<b;i++)
#define bitfor(bit,N) for (int bit = 0; bit < (1 << (intt)(N); ++bit)
#define eb emplace_back
using intt = int64_t;
using ldou = long double;
using vi=vector<int>;
using vt=vector<intt>;
using vc=vector<char>;
using vs=vector<string>;
using vd=vector<ldou>;
using vb=vector<bool>;
using vvi=vector<vi>;
using vvt=vector<vt>;
using vvc=vector<vc>;
using vvs=vector<string>;
using vvd=vector<vd>;
using pa=pair<intt,intt>;
using vpa=vector<pa>;
using mapt=map<intt,intt>;
using vmap=vector<mapt>;
using st=set<intt>;
using Graph = vector<vector<int>>; // グラフ型
intt gcd(intt a,intt b){if(a%b==0){return b;}else{return gcd(b,a%b);}}//最大公約数
intt lcm(intt a,intt b){return a*b/gcd(a,b);}//最小公倍数
intt sum(const long &a,const long &b){return(a+b)*(b-a+1)/2;}//合計
vector<long long>yakusu(long long N){vector<long long>res;for(long long i=1;i*i<=N;++i){if(N%i==0){res.push_back(i);if(N/i!=i)res.push_back(N/i);}}sort(res.begin(),res.end());return res;}//約数全部
intt sumi(intt n){int x=0;while(n>=10){x+=n%10;n/=10;}x+=n;return x;}//各桁の和
bool sque(long long N){long long r=(long long)floor(sqrt((long double)N));return(r*r)==N;}//平方数
intt max(intt a,intt b){if(a>b){return a;}else{return b;}}
intt min(intt a,intt b){if(a>b){return b;}else{return a;}}
#include <cmath>
bool integ(double x){return std::floor(x)==x;}
vector<intt> ruiseki(intt n,vector<intt> a){vector<intt>s(n+1,0);for(intt i=0;i<n;++i){s[i+1]=s[i]+a[i];}return s;}
void strsort(vector<string>&S){map<int,int>SwapInd;int maxi=0;for(int i=0;i<S.size();i++){if(S[i].size()>maxi)maxi=S[i].size();}for(int i=0;i<maxi;i++){int k=maxi-i;int sort_num=0;for(int j=0;j<S.size();j++){if(S[j].size()>=k){SwapInd[j]=1;sort_num++;}}int swapped=0;for(int j=0;j<S.size();j++){if(SwapInd[j]==1&&j<S.size()-sort_num){if(SwapInd[S.size()-sort_num+swapped]==0){iter_swap(S.begin()+j,S.begin()+S.size()-sort_num+swapped);}else{while(SwapInd[S.size()-sort_num+swapped]!=0){swapped++;if(S.size()-sort_num+swapped>=S.size()){break;}if(S.size()-sort_num+swapped<S.size()){iter_swap(S.begin()+j,S.begin()+S.size()-sort_num+swapped);}}}
     SwapInd[j]=0;SwapInd[S.size()-sort_num+swapped]=0;swapped++;}}vector<string>WhatSorted(sort_num);vector<pair<int,int>>char_and_index(sort_num);for(int j=0;j<sort_num;j++){if(S[S.size()-sort_num+j][k-1]>=65&&S[S.size()-sort_num+j][k-1]<=90){char_and_index[j].first=(int)S[S.size()-sort_num+j][k-1]+32;}else{char_and_index[j].first=(int)S[S.size()-sort_num+j][k-1];}char_and_index[j].second=j;WhatSorted[j]=S[S.size()-sort_num+j];}stable_sort(char_and_index.begin(),char_and_index.end());for(int j=0;j<sort_num;j++){S[S.size()-sort_num+j]=WhatSorted[char_and_index[j].second];}}}
intt fac(intt k){intt sum=1;for(intt i=1;i<=k;++i){sum*=i;}return sum;}
vector<bool> seen;
void dfs(const Graph &G,int v){seen[v]=true;for(auto next_v:G[v]){if(seen[next_v])continue;dfs(G,next_v);}}//DFS

Graph g;
intt mini=INT64_MAX;
intt maxi=INT64_MIN;
intt zero=0;
intt cnt=0;
intt su=0;
intt ans=0;
intt n;
string s;


int main() {
cout << fixed << setprecision(20);






cin>>n;
cnt++;
while(1){
     ans+=cnt;
     if(ans>=n){
          cout<<cnt<<endl;
          return 0;
     }
     
     cnt++;
}
}