#include <bits/stdc++.h>
using namespace std;
struct Pair {
  int x;
  int y;
};
int NOD(int x, int y) {
  if (x == 0) return y;
  if (y == 0) return x;
  while ((x % y != 0) && (y % x != 0)) {
    if (x > y)
      x %= y;
    else
      y %= x;
  }
  if (x < y)
    return x;
  else
    return y;
}
int NOK(int x, int y) { return (x / NOD(x, y)) * y; }
vector<int> fact(int n) {
  vector<int> a;
  if (n == 6) {
    a.push_back(3);
    return a;
  }
  for (int i = 2; (i - 1) * (i - 1) < n; i++) {
    if (n % i == 0) {
      if (i != 2) a.push_back(i);
      if (i * i != n) a.push_back(n / i);
    }
  }
  return a;
}
int Max_SubArray(vector<int> a) {
  int cur_sum = 0;
  int max_sum = a[0];
  bool flag = 1;
  for (int i = 0; i < a.size(); i++) {
    if (a[i] > 0) {
      flag = 0;
      break;
    }
    if (a[i] > max_sum) max_sum = a[i];
  }
  if (flag) return max_sum;
  max_sum = 0;
  for (int i = 0; i < a.size(); i++) {
    cur_sum += a[i];
    if (cur_sum > max_sum) max_sum = cur_sum;
    if (cur_sum < 0) cur_sum = 0;
  }
  return max_sum;
}
void Jlob() {
  int n, k;
  cin >> n >> k;
  int x1, x2, y1, y2;
  cin >> x1 >> y1;
  cin >> x2 >> y2;
  double sum = 0;
  for (int i = 2; i < n; i++) {
    sum += sqrt(double((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)));
    x1 = x2;
    y1 = y2;
    cin >> x2 >> y2;
  }
  sum += sqrt(float((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)));
  printf("%.6", double(k) * sum / 50.0);
}
void prize() {
  int n;
  long a, b, c, d, e;
  cin >> n;
  vector<long> p(n);
  for (int i = 0; i < n; i++) cin >> p[i];
  cin >> a >> b >> c >> d >> e;
  long pa = 0, pb = 0, pc = 0, pd = 0, pe = 0;
  long sum = 0;
  for (int i = 0; i < n; i++) {
    sum += p[i];
    pe += (sum / e);
    sum %= e;
    pd += (sum / d);
    sum %= d;
    pc += (sum / c);
    sum %= c;
    pb += (sum / b);
    sum %= b;
    pa += (sum / a);
    sum %= a;
  }
  cout << pa << " " << pb << " " << pc << " " << pd << " " << pe << "\n";
  cout << sum;
}
vector<int> Merge(vector<int> a, vector<int> b) {
  vector<int> c;
  c.reserve(a.size() + b.size());
  int i = 0;
  int j = 0;
  while (i < a.size() || j < b.size()) {
    if (i == a.size()) {
      if (j == b.size()) break;
      c.push_back(b[j]);
      j++;
    }
    if (j == b.size()) {
      if (i == a.size()) break;
      c.push_back(a[i]);
      i++;
    }
    if (i < a.size() && j < b.size()) {
      if (a[i] < b[j]) {
        c.push_back(a[i]);
        i++;
      } else {
        c.push_back(b[j]);
        j++;
      }
    }
  }
  return c;
}
vector<int> Merge_sort(vector<int> a) {
  if (a.size() <= 1) return a;
  if (a.size() == 2) {
    if (a[0] > a[1]) swap(a[0], a[1]);
    return a;
  }
  if (a.size() == 3) {
    if (a[0] > a[1]) swap(a[0], a[1]);
    if (a[1] > a[2]) swap(a[1], a[2]);
    if (a[0] > a[1]) swap(a[0], a[1]);
    return a;
  }
  vector<vector<int> > b(a.size() / 2);
  for (int i = 0; i < a.size(); i++) {
    if (i / 2 == b.size())
      b[b.size() - 1].push_back(a[i]);
    else
      b[i / 2].push_back(a[i]);
  }
  for (int i = 0; i < b.size() - 1; i++)
    if (b[i][0] > b[i][1]) swap(b[i][0], b[i][1]);
  int k = b.size() - 1;
  if (b[k].size() == 2) {
    if (b[k][0] > b[k][1]) swap(b[k][0], b[k][1]);
  } else {
    if (b[k][0] > b[k][1]) swap(b[k][0], b[k][1]);
    if (b[k][1] > b[k][2]) swap(b[k][1], b[k][2]);
    if (b[k][0] > b[k][1]) swap(b[k][0], b[k][1]);
  }
  vector<vector<int> > c;
  while (b.size() > 1) {
    for (int i = 0; i < b.size() - 1; i += 2)
      c.push_back(Merge(b[i], b[i + 1]));
    if (b.size() % 2 == 1) c.push_back(b[b.size() - 1]);
    b = c;
    c.clear();
  }
  return b[0];
}
void B127() {
  int n;
  cin >> n;
  int a;
  vector<int> h(100);
  for (int i = 0; i < 100; i++) h[i] = 0;
  for (int i = 0; i < n; i++) {
    cin >> a;
    h[a - 1]++;
  }
  for (int i = 0; i < 100; i++) h[i] /= 2;
  int ans = 0;
  for (int i = 0; i < 100; i++) ans += h[i];
  cout << ans / 2;
}
long long C(int n, int k) {
  if (k > n) return 0;
  if (k == 0) return 0;
  if (k > n / 2) k = n - k;
  vector<vector<long long> > a(n + 1);
  for (int i = 0; i <= n; i++) a[i].resize(i + 1);
  for (int i = 0; i <= n; i++) {
    a[i][0] = 1;
    a[i][i] = 1;
  }
  for (int i = 2; i <= n; i++)
    for (int j = 1; j <= min(k, i - 1); j++)
      a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
  return a[n][k];
}
long long my_pow(int x, int y) {
  int k = 1;
  vector<long long> a;
  unsigned long long x1 = x;
  while (k < y) {
    a.push_back(x1);
    x1 = x1 * x1;
    k *= 2;
  }
  if (k == y) return x1;
  vector<bool> f;
  while (y > 0) {
    if (y % 2)
      f.push_back(1);
    else
      f.push_back(0);
    y /= 2;
  }
  unsigned long long ans = 1;
  for (int i = 0; i < a.size(); i++)
    if (f[i]) ans *= a[i];
  return ans;
}
int main() { B127(); }
