#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 1;
int f[N], vis[N], p[N];
void pre() {
  for (int i = 2; i * i < N; ++i) {
    if (!vis[i]) p[++p[0]] = i;
    for (int j = 1; j <= p[0] && i * p[j] < N; ++j) {
      vis[i * p[j]] = 1;
      if (i % p[j] == 0) {
        break;
      }
    }
  }
}
int main() {
  int Q;
  scanf("%d", &Q);
  pre();
  memset(f, -0x3f, sizeof(f));
  f[0] = 0;
  for (int i = 1; i <= 1000; ++i)
    for (int j = 0; j < i; ++j)
      if (vis[i - j]) f[i] = max(f[i], f[j] + 1);
  while (Q--) {
    int x;
    scanf("%d", &x);
    int ans = 0;
    if (x >= 1000) {
      if (x % 4 == 0) ans = x / 4;
      if (x % 4 == 1) ans = (x - 9) / 4 + 1;
      if (x % 4 == 2) ans = (x - 6) / 4 + 1;
      if (x % 4 == 3) ans = (x - 15) / 4 + 2;
    } else {
      ans = f[x];
    }
    cout << (ans <= 0 ? -1 : ans) << endl;
  }
}

### Prompt

Develop a solution in CPP to the problem described below:

You are given several queries. In the i-th query you are given a single positive integer ni. You are to represent ni as a sum of maximum possible number of composite summands and print this maximum number, or print -1, if there are no such splittings.

An integer greater than 1 is composite, if it is not prime, i.e. if it has positive divisors not equal to 1 and the integer itself.

Input

The first line contains single integer q (1 ≤ q ≤ 105) — the number of queries.

q lines follow. The (i + 1)-th line contains single integer ni (1 ≤ ni ≤ 109) — the i-th query.

Output

For each query print the maximum possible number of summands in a valid splitting to composite summands, or -1, if there are no such splittings.

Examples

Input

1
12


Output

3


Input

2
6
8


Output

1
2


Input

3
1
2
3


Output

-1
-1
-1

Note

12 = 4 + 4 + 4 = 4 + 8 = 6 + 6 = 12, but the first splitting has the maximum possible number of summands.

8 = 4 + 4, 6 can't be split into several composite summands.

1, 2, 3 are less than any composite number, so they do not have valid splittings.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 1;
int f[N], vis[N], p[N];
void pre() {
  for (int i = 2; i * i < N; ++i) {
    if (!vis[i]) p[++p[0]] = i;
    for (int j = 1; j <= p[0] && i * p[j] < N; ++j) {
      vis[i * p[j]] = 1;
      if (i % p[j] == 0) {
        break;
      }
    }
  }
}
int main() {
  int Q;
  scanf("%d", &Q);
  pre();
  memset(f, -0x3f, sizeof(f));
  f[0] = 0;
  for (int i = 1; i <= 1000; ++i)
    for (int j = 0; j < i; ++j)
      if (vis[i - j]) f[i] = max(f[i], f[j] + 1);
  while (Q--) {
    int x;
    scanf("%d", &x);
    int ans = 0;
    if (x >= 1000) {
      if (x % 4 == 0) ans = x / 4;
      if (x % 4 == 1) ans = (x - 9) / 4 + 1;
      if (x % 4 == 2) ans = (x - 6) / 4 + 1;
      if (x % 4 == 3) ans = (x - 15) / 4 + 2;
    } else {
      ans = f[x];
    }
    cout << (ans <= 0 ? -1 : ans) << endl;
  }
}

```