#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize "trapv"
template <typename T>
void pop_front(std::vector<T> &v) {
  if (v.size() > 0) {
    v.erase(v.begin());
  }
}
template <typename R>
void pop_back(std::vector<R> &v) {
  if (v.size() > 0) {
    v.erase(v.begin() + v.size() - 1);
  }
}
struct custom_hash {
  static uint64_t splitmix64(uint64_t x) {
    x += 0x9e3779b97f4a7c15;
    x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
    x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
    return x ^ (x >> 31);
  }
  size_t operator()(uint64_t x) const {
    static const uint64_t FIXED_RANDOM =
        chrono::steady_clock::now().time_since_epoch().count();
    return splitmix64(x + FIXED_RANDOM);
  }
};
long long int less_than_or_equal_to(vector<long long int> vec,
                                    long long int k) {
  sort(vec.begin(), vec.end());
  if (vec[0] > k)
    return -1;
  else if (vec[vec.size() - 1] < k)
    return vec[vec.size() - 1];
  auto x = lower_bound(vec.begin(), vec.end(), k);
  if (k == *x)
    return *x;
  else {
    x--;
    return *x;
  }
}
bool isPerfectSquare(long double x) {
  long double sr = sqrt(x);
  return ((sr - floor(sr)) == 0);
}
bool isprime(long long int n) {
  if (n <= 1) return false;
  for (long long int i = 2; i * i <= n; i++)
    if (n % i == 0) return false;
  return true;
}
void prime_factors(long long int n) {
  for (long long int i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      long long int count = 0;
      while (n % i == 0) {
        count++;
        n = n / i;
      }
      cout << i << " "
           << "^"
           << " " << count << "\n";
    }
  }
  if (n > 1)
    cout << n << " "
         << "^"
         << " " << 1 << "\n";
}
vector<long long int> divisors(long long int n) {
  vector<long long int> v;
  for (long long int i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      v.push_back(i);
      if ((n / i) != i) v.push_back(n / i);
    }
  }
  return v;
}
long long int power(long long int a, long long int n, long long int m) {
  long long int res = 1;
  while (n) {
    if (n % 2)
      res = (res * a) % m, n--;
    else
      a = (a * a) % m, n /= 2;
  }
  return res;
}
long long int ts(long long int arr[], int l, int r, int x) {
  while (l <= r) {
    long long int mid1 = l + (r - l) / 3;
    long long int mid2 = r - (r - l) / 3;
    if (arr[mid1] == x || arr[mid2] == x) return 1;
    if (x < arr[mid1])
      r = mid1 - 1;
    else if (x > arr[mid2])
      l = mid2 + 1;
    else {
      l = mid1 + 1;
      r = mid2 - 1;
    }
  }
  return -1;
}
long long int modulo_inverse(long long int a, long long int m) {
  long long int res = power(a, m - 2, m);
  return res;
}
long long int crt(long long int num[], long long int rem[], long long int n) {
  long long int pp[n];
  long long int p = 1;
  for (int i = 0; i < n; i++) p *= num[i];
  for (int i = 0; i < n; i++) pp[i] = (p / num[i]);
  long long int inv[n];
  for (int i = 0; i < n; i++) inv[i] = modulo_inverse(pp[i], num[i]);
  long long int ans = 0;
  for (int i = 0; i < n; i++) ans += pp[i] * inv[i] * rem[i];
  return ans;
}
long long int Extended_gcd(long long int a, long long int b, long long int &x,
                           long long int &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long int x1, y1;
  long long int g = Extended_gcd(b, a % b, x1, y1);
  x = y1;
  y = x1 - (a / b) * y1;
  return g;
}
long long int count_freq(string &str, string &substr) {
  long long int count = 0;
  size_t found = str.find(substr, 0);
  while (found != string::npos) {
    count++;
    found = str.find(substr, found + 1);
  }
  return count;
}
int main() {
  auto start = chrono::high_resolution_clock::now();
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  long long int t = 1;
  cin >> t;
  while (t--) {
    long long int n;
    cin >> n;
    long long int arr[n];
    for (long long int i = 0; i < n; i++) cin >> arr[i];
    multiset<long long int> odd, even;
    for (auto x : arr) {
      if (x % 2 == 0)
        even.insert(x);
      else
        odd.insert(x);
    }
    if (even.size() % 2 == 0 && odd.size() % 2 == 0)
      cout << "YES"
           << "\n";
    else {
      int flag = 0;
      for (auto x : odd) {
        long long int val = x;
        if (even.count(val - 1) || even.count(val + 1)) {
          flag = 1;
          break;
        }
      }
      if (flag)
        cout << "YES"
             << "\n";
      else
        cout << "NO"
             << "\n";
    }
  }
  auto finish = chrono::high_resolution_clock::now();
  cerr << "Time elapsed: "
       << (chrono::duration<long double>(finish - start)).count() << "s\n";
  return 0;
}

### Prompt

In cpp, your task is to solve the following problem:

We call two numbers x and y similar if they have the same parity (the same remainder when divided by 2), or if |x-y|=1. For example, in each of the pairs (2, 6), (4, 3), (11, 7), the numbers are similar to each other, and in the pairs (1, 4), (3, 12), they are not.

You are given an array a of n (n is even) positive integers. Check if there is such a partition of the array into pairs that each element of the array belongs to exactly one pair and the numbers in each pair are similar to each other.

For example, for the array a = [11, 14, 16, 12], there is a partition into pairs (11, 12) and (14, 16). The numbers in the first pair are similar because they differ by one, and in the second pair because they are both even.

Input

The first line contains a single integer t (1 ≤ t ≤ 1000) — the number of test cases. Then t test cases follow.

Each test case consists of two lines.

The first line contains an even positive integer n (2 ≤ n ≤ 50) — length of array a.

The second line contains n positive integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 100).

Output

For each test case print:

  * YES if the such a partition exists, 
  * NO otherwise. 



The letters in the words YES and NO can be displayed in any case.

Example

Input


7
4
11 14 16 12
2
1 8
4
1 1 1 1
4
1 2 5 6
2
12 13
6
1 6 3 10 5 8
6
1 12 3 10 5 8


Output


YES
NO
YES
YES
YES
YES
NO

Note

The first test case was explained in the statement.

In the second test case, the two given numbers are not similar.

In the third test case, any partition is suitable.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize "trapv"
template <typename T>
void pop_front(std::vector<T> &v) {
  if (v.size() > 0) {
    v.erase(v.begin());
  }
}
template <typename R>
void pop_back(std::vector<R> &v) {
  if (v.size() > 0) {
    v.erase(v.begin() + v.size() - 1);
  }
}
struct custom_hash {
  static uint64_t splitmix64(uint64_t x) {
    x += 0x9e3779b97f4a7c15;
    x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
    x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
    return x ^ (x >> 31);
  }
  size_t operator()(uint64_t x) const {
    static const uint64_t FIXED_RANDOM =
        chrono::steady_clock::now().time_since_epoch().count();
    return splitmix64(x + FIXED_RANDOM);
  }
};
long long int less_than_or_equal_to(vector<long long int> vec,
                                    long long int k) {
  sort(vec.begin(), vec.end());
  if (vec[0] > k)
    return -1;
  else if (vec[vec.size() - 1] < k)
    return vec[vec.size() - 1];
  auto x = lower_bound(vec.begin(), vec.end(), k);
  if (k == *x)
    return *x;
  else {
    x--;
    return *x;
  }
}
bool isPerfectSquare(long double x) {
  long double sr = sqrt(x);
  return ((sr - floor(sr)) == 0);
}
bool isprime(long long int n) {
  if (n <= 1) return false;
  for (long long int i = 2; i * i <= n; i++)
    if (n % i == 0) return false;
  return true;
}
void prime_factors(long long int n) {
  for (long long int i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      long long int count = 0;
      while (n % i == 0) {
        count++;
        n = n / i;
      }
      cout << i << " "
           << "^"
           << " " << count << "\n";
    }
  }
  if (n > 1)
    cout << n << " "
         << "^"
         << " " << 1 << "\n";
}
vector<long long int> divisors(long long int n) {
  vector<long long int> v;
  for (long long int i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      v.push_back(i);
      if ((n / i) != i) v.push_back(n / i);
    }
  }
  return v;
}
long long int power(long long int a, long long int n, long long int m) {
  long long int res = 1;
  while (n) {
    if (n % 2)
      res = (res * a) % m, n--;
    else
      a = (a * a) % m, n /= 2;
  }
  return res;
}
long long int ts(long long int arr[], int l, int r, int x) {
  while (l <= r) {
    long long int mid1 = l + (r - l) / 3;
    long long int mid2 = r - (r - l) / 3;
    if (arr[mid1] == x || arr[mid2] == x) return 1;
    if (x < arr[mid1])
      r = mid1 - 1;
    else if (x > arr[mid2])
      l = mid2 + 1;
    else {
      l = mid1 + 1;
      r = mid2 - 1;
    }
  }
  return -1;
}
long long int modulo_inverse(long long int a, long long int m) {
  long long int res = power(a, m - 2, m);
  return res;
}
long long int crt(long long int num[], long long int rem[], long long int n) {
  long long int pp[n];
  long long int p = 1;
  for (int i = 0; i < n; i++) p *= num[i];
  for (int i = 0; i < n; i++) pp[i] = (p / num[i]);
  long long int inv[n];
  for (int i = 0; i < n; i++) inv[i] = modulo_inverse(pp[i], num[i]);
  long long int ans = 0;
  for (int i = 0; i < n; i++) ans += pp[i] * inv[i] * rem[i];
  return ans;
}
long long int Extended_gcd(long long int a, long long int b, long long int &x,
                           long long int &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long int x1, y1;
  long long int g = Extended_gcd(b, a % b, x1, y1);
  x = y1;
  y = x1 - (a / b) * y1;
  return g;
}
long long int count_freq(string &str, string &substr) {
  long long int count = 0;
  size_t found = str.find(substr, 0);
  while (found != string::npos) {
    count++;
    found = str.find(substr, found + 1);
  }
  return count;
}
int main() {
  auto start = chrono::high_resolution_clock::now();
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  long long int t = 1;
  cin >> t;
  while (t--) {
    long long int n;
    cin >> n;
    long long int arr[n];
    for (long long int i = 0; i < n; i++) cin >> arr[i];
    multiset<long long int> odd, even;
    for (auto x : arr) {
      if (x % 2 == 0)
        even.insert(x);
      else
        odd.insert(x);
    }
    if (even.size() % 2 == 0 && odd.size() % 2 == 0)
      cout << "YES"
           << "\n";
    else {
      int flag = 0;
      for (auto x : odd) {
        long long int val = x;
        if (even.count(val - 1) || even.count(val + 1)) {
          flag = 1;
          break;
        }
      }
      if (flag)
        cout << "YES"
             << "\n";
      else
        cout << "NO"
             << "\n";
    }
  }
  auto finish = chrono::high_resolution_clock::now();
  cerr << "Time elapsed: "
       << (chrono::duration<long double>(finish - start)).count() << "s\n";
  return 0;
}

```