#include <bits/stdc++.h>
using namespace std;
struct Graph {
  struct Vertex {
    vector<int> o;
    int fa, dep;
  };
  vector<Vertex> v;
  vector<pair<int, int> > e;
  Graph(int n) : v(n) {}
  void add(const pair<int, int> &ed) {
    v[ed.first].o.push_back(e.size());
    e.push_back(ed);
  }
  void dfs(int u, int f) {
    v[u].fa = f;
    v[u].dep = v[f].dep + 1;
    for (int i = 0, k; i < v[u].o.size(); ++i)
      if (k = v[u].o[i], e[k].second != f) dfs(e[k].second, u);
  }
  int ask() {
    int ans = 0;
    vector<int> vis(v.size(), 0);
    priority_queue<pair<int, int> > q;
    v[0].dep = -1;
    dfs(1, 0);
    for (int i = 0; i < v.size(); ++i) {
      if (v[i].dep > 2)
        q.push(make_pair(v[i].dep, i));
      else
        vis[i] = 1;
    }
    while (!q.empty()) {
      int u = q.top().second;
      q.pop();
      if (vis[u]) continue;
      vis[u = v[u].fa] = 1;
      ++ans;
      for (int i = 0; i < v[u].o.size(); ++i) vis[e[v[u].o[i]].second] = 1;
    }
    return ans;
  }
};
int main() {
  int n;
  scanf("%d", &n);
  Graph g(n + 1);
  for (int i = 1, x, y; i < n; ++i) {
    scanf("%d%d", &x, &y);
    g.add({x, y});
    g.add({y, x});
  }
  printf("%d\n", g.ask());
}
