#include <bits/stdc++.h>
using namespace std;
typedef struct lnod {
  int nod;
  lnod *next;
} * nod;
int i, n, m, x[1005], y[1005], rs, p[1005];
bool e[1005][1005], viz[1005];
nod lda[1005];
int find(int x) { return p[x] == x ? x : p[x] = find(p[x]); }
void unite(int x, int y) { p[find(x)] = find(y); }
void add(int x, nod &y) {
  nod p = new lnod;
  p->nod = x;
  p->next = y;
  y = p;
}
void dfs(int x) {
  viz[x] = 1;
  for (nod p = lda[x]; p; p = p->next)
    if (!viz[p->nod] && e[x][p->nod]) dfs(p->nod);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  return cout << (n + 1) / 2 << '\n', 0;
  cin >> n >> m;
  for (i = 1; i <= n; ++i) p[i] = i;
  for (i = 1; i <= m; ++i)
    cin >> x[i] >> y[i], unite(x[i], y[i]), add(x[i], lda[y[i]]),
        add(y[i], lda[x[i]]), e[x[i]][y[i]] = e[y[i]][x[i]] = 1;
  for (i = 1; i <= n; ++i)
    if (find(i) != find(1)) return cout << "no\n", 0;
  for (i = 1; i <= m; ++i) {
    memset(viz, 0, sizeof(viz));
    e[x[i]][y[i]] = e[y[i]][x[i]] = 0;
    dfs(1);
    e[x[i]][y[i]] = e[y[i]][x[i]] = 1;
    bool u = 0;
    for (int j = 1; j <= n && !u; ++j)
      if (!viz[j]) u = 1;
    if (!u) return cout << "no\n", 0;
  }
  cout << "yes\n";
  return 0;
}
