#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
const int MOD = 1e9 + 7;
vector<pair<long long int, long long int> > vp;
map<long long int, long long int> mp, mpp;
vector<long long int> v, v1, v2;
long long int dp[N], visit[N];
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << "  ";
  __f(comma + 1, args...);
}
long long int go[N];
int root(int x) {
  while (x != go[x]) {
    go[x] = go[go[x]];
    x = go[x];
  }
  return x;
}
void join(int x, int y) { go[root(x)] = go[root(y)]; }
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, m, val, k, d, mi = 1e9, mx(0);
  long long int sum(0), ct(0), p(0), q(0);
  string s;
  for (int i = 1; i < N; i++) {
    go[i] = i;
  }
  cin >> n >> k;
  long long int a[n + 1];
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= n; i++) {
    mp[a[i]] = i, mpp[a[i]]++;
  }
  for (int i = n; i >= 1; i--) {
    if (a[i] % k == 0) {
      long long int p = a[i] / k;
      if (mpp[p]) {
        join(mp[p], i);
      }
    }
  }
  mp.clear();
  for (int i = 1; i <= n; i++) {
    mp[root(i)]++;
  }
  for (auto it : mp) {
    sum += (it.second + 1) / 2;
  }
  cout << sum;
}

### Prompt

Please formulate a CPP solution to the following problem:

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;
const int N = 1e6 + 5;
const int MOD = 1e9 + 7;
vector<pair<long long int, long long int> > vp;
map<long long int, long long int> mp, mpp;
vector<long long int> v, v1, v2;
long long int dp[N], visit[N];
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << "  ";
  __f(comma + 1, args...);
}
long long int go[N];
int root(int x) {
  while (x != go[x]) {
    go[x] = go[go[x]];
    x = go[x];
  }
  return x;
}
void join(int x, int y) { go[root(x)] = go[root(y)]; }
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, m, val, k, d, mi = 1e9, mx(0);
  long long int sum(0), ct(0), p(0), q(0);
  string s;
  for (int i = 1; i < N; i++) {
    go[i] = i;
  }
  cin >> n >> k;
  long long int a[n + 1];
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= n; i++) {
    mp[a[i]] = i, mpp[a[i]]++;
  }
  for (int i = n; i >= 1; i--) {
    if (a[i] % k == 0) {
      long long int p = a[i] / k;
      if (mpp[p]) {
        join(mp[p], i);
      }
    }
  }
  mp.clear();
  for (int i = 1; i <= n; i++) {
    mp[root(i)]++;
  }
  for (auto it : mp) {
    sum += (it.second + 1) / 2;
  }
  cout << sum;
}

```