#include <bits/stdc++.h>
using namespace std;
vector<long long int> v;
int bs(long long int n) {
  int mn = 0, mx = v.size(), mid;
  while (mn <= mx) {
    mid = (mn + mx) / 2;
    if (v[mid] < n)
      mn = mid + 1;
    else if (v[mid] > n)
      mx = mid - 1;
    else
      break;
  }
  if (v[mid] < n)
    return mid;
  else if (v[mid] >= n)
    return mid - 1;
}
int main() {
  int n, i, k, num;
  cin >> n >> k;
  for (i = 0; i < n; i++) {
    cin >> num;
    v.push_back(num);
  }
  sort(v.begin(), v.end());
  v.push_back(INT_MAX);
  int ans = n;
  for (i = 0; i < n; i++) {
    if (v[i] == -1) continue;
    if (bs(k * v[i]) + 1 != i && v[bs(k * v[i]) + 1] == k * v[i]) {
      ans--;
      v[bs(k * v[i]) + 1] = -1;
    } else if (bs(k * v[i]) != i && v[bs(k * v[i])] == k * v[i]) {
      ans--;
      v[bs(k * v[i])] = -1;
    }
  }
  cout << ans;
}

### Prompt

Develop a solution in CPP to the problem described below:

A k-multiple free set is a set of integers where there is no pair of integers where one is equal to another integer multiplied by k. That is, there are no two integers x and y (x < y) from the set, such that y = x·k.

You're given a set of n distinct positive integers. Your task is to find the size of it's largest k-multiple free subset.

Input

The first line of the input contains two integers n and k (1 ≤ n ≤ 105, 1 ≤ k ≤ 109). The next line contains a list of n distinct positive integers a1, a2, ..., an (1 ≤ ai ≤ 109).

All the numbers in the lines are separated by single spaces.

Output

On the only line of the output print the size of the largest k-multiple free subset of {a1, a2, ..., an}.

Examples

Input

6 2
2 3 6 5 4 10


Output

3

Note

In the sample input one of the possible maximum 2-multiple free subsets is {4, 5, 6}.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
vector<long long int> v;
int bs(long long int n) {
  int mn = 0, mx = v.size(), mid;
  while (mn <= mx) {
    mid = (mn + mx) / 2;
    if (v[mid] < n)
      mn = mid + 1;
    else if (v[mid] > n)
      mx = mid - 1;
    else
      break;
  }
  if (v[mid] < n)
    return mid;
  else if (v[mid] >= n)
    return mid - 1;
}
int main() {
  int n, i, k, num;
  cin >> n >> k;
  for (i = 0; i < n; i++) {
    cin >> num;
    v.push_back(num);
  }
  sort(v.begin(), v.end());
  v.push_back(INT_MAX);
  int ans = n;
  for (i = 0; i < n; i++) {
    if (v[i] == -1) continue;
    if (bs(k * v[i]) + 1 != i && v[bs(k * v[i]) + 1] == k * v[i]) {
      ans--;
      v[bs(k * v[i]) + 1] = -1;
    } else if (bs(k * v[i]) != i && v[bs(k * v[i])] == k * v[i]) {
      ans--;
      v[bs(k * v[i])] = -1;
    }
  }
  cout << ans;
}

```