#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
using ll = long long;
typedef struct sol {
  ll val;
  ll h;
} sol;
typedef struct elem {
  int x1, x2, y1, y2;
  bool operator==(const elem& t) const {
    return (this->x1 == t.x1 && this->x2 == t.x2 && this->y1 == t.y1 &&
            this->y2 == t.y2);
  }
} elem;
class ElemHash {
 public:
  size_t operator()(const elem& t) const { return t.x1 + t.x2 + t.y1 + t.y2; }
};
bool sort_pr(const pair<int, int>& a, const pair<int, int>& b) {
  return (a.first <= b.first) && (a.second <= b.second);
}
bool comp_s(const vector<char>& s1, const vector<char>& s2) {
  for (int i = 0; i < s1.size(); ++i) {
    if (s1[i] == s2[i])
      continue;
    else if (s1[i] < s2[i])
      return true;
    else
      return false;
  }
  return false;
}
typedef struct node {
  char c;
  node* l;
  node* r;
} node;
int f(int x) {
  x += 1;
  while (x % 10 == 0 && x > 0) x /= 10;
  return x;
}
int main() {
  int n;
  cin >> n;
  unordered_map<int, int> mp;
  for (int i = 0; i < n; ++i) {
    int temp;
    cin >> temp;
    mp[temp]++;
  }
  int tot = 0;
  for (auto a : mp) {
    tot += a.second / 2;
  }
  cout << tot / 2 << endl;
  return 0;
}
