#include <bits/stdc++.h>using namespace std;
vector<bool> sieve(int n) { vector<bool> isPrime(n + 1, true); isPrime[lbk]0[rbk] = isPrime[lbk]1[rbk] = false; for (int p = 2; p * p <= n; p++) { if (isPrime[lbk]p[rbk]) { for (int i = p * p; i <= n; i += p) { isPrime[lbk]i[rbk] = false; } } } return isPrime;}
int main() { int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[lbk]i[rbk]; }
// 预计算质数 int maxNum = *max_element(a.begin(), a.end()); vector<bool> isPrime = sieve(maxNum);
for (int i = 0; i < n; i++) { if (a[lbk]i[rbk] % 2 != 0) { cout << "NO WAY!" << '\n'; continue; }
bool flag = false; for (int j = 2; j <= a[lbk]i[rbk] / 2; j++) { if (isPrime[lbk]j[rbk] && isPrime[lbk]a[lbk]i[rbk] - j[rbk]) { cout << a[lbk]i[rbk] << "=" << j << "+" << a[lbk]i[rbk] - j << '\n'; flag = true; break; } }
if (!flag) { cout << "NO WAY!" << '\n'; } }
return 0;}


vector<bool> sieve(int n) { vector<bool> isPrime(n + 1, true); isPrime[lbk]0[rbk] = isPrime[lbk]1[rbk] = false; for (int p = 2; p * p <= n; p++) { if (isPrime[lbk]p[rbk]) { for (int i = p * p; i <= n; i += p) { isPrime[lbk]i[rbk] = false; } } } return isPrime;}
int main() { int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[lbk]i[rbk]; }
// 预计算质数 int maxNum = *max_element(a.begin(), a.end()); vector<bool> isPrime = sieve(maxNum);
for (int i = 0; i < n; i++) { if (a[lbk]i[rbk] % 2 != 0) { cout << "NO WAY!" << '\n'; continue; }
bool flag = false; for (int j = 2; j <= a[lbk]i[rbk] / 2; j++) { if (isPrime[lbk]j[rbk] && isPrime[lbk]a[lbk]i[rbk] - j[rbk]) { cout << a[lbk]i[rbk] << "=" << j << "+" << a[lbk]i[rbk] - j << '\n'; flag = true; break; } }
if (!flag) { cout << "NO WAY!" << '\n'; } }
return 0;}

