#include "iostream"
#include "string"
#include "map"
using namespace std;
bool check(map<string, int> num)
{
string elem;
map<string, int>::iterator iter;
for (iter = num.begin(); iter != num.end(); iter++)
{
elem = iter->first;
if (elem[0] == '(' && num[elem] != 0)
{
return false;
}
}
return true;
}
map<string, int> clean(map<string, int> num)
{
string e, elem;
int bback, back, inner_num;
map<string, int>::iterator iter;
for (iter = num.begin(); iter != num.end(); iter++)
{
elem = iter->first;
if (elem[0] == '(' && num[elem] != 0)
{
bback = num[elem];
// 拆分(NO3)
for (int i = 1; i < elem.size() - 1; i++)
{
e = elem[i];
if (elem[i] == '(')
{
inner_num = 1;
while (inner_num)
{
if (elem[i + 1] == ')')
{
inner_num--;
}
else if (elem[i + 1] == '(')
{
inner_num++;
}
i++;
e += elem[i];
}
}
if (elem[i + 1] >= 'a' && elem[i + 1] <= 'z')
{
i++;
e += elem[i];
}
// 系数
if (elem[i + 1] >= '1' && elem[i + 1] <= '9')
{
i++;
back = elem[i] - '0';
while (elem[i + 1] >= '0' && elem[i + 1] <= '9')
{
i++;
back = back * 10 + elem[i] - '0';
} }
else
{
back = 1;
}
// 计分
if (!num.count(e))
{
num[e] = 0;
}
num[e] += back * bback;
}
num[elem] = 0;
}
}
return num;
}
char func(string s)
{
map<string, int> num;
string elem = "";
int prior = 1;
int back = 1;
int bback;
int inner_num = 0;
bool left = true;
// CaCl2+2AgNO3=Ca(NO3)2+2AgCl
// 4Au+8NaCN+2H2O+O2=4Na(Au(CN)2)+4NaOH
for (int j = 0; j < s.size(); j++)
{
if ((s[j] >= 'A' && s[j] <= 'Z') || s[j] == '(') // 元素开头字母
{
elem = s[j];
if (s[j] == '(')
{
inner_num = 1;
while (inner_num)
{
if (s[j + 1] == ')')
{
inner_num--;
}
else if (s[j + 1] == '(')
{
inner_num++;
}
j++;
elem += s[j];
}
}
if ((s[j + 1] >= 'a' && s[j + 1] <= 'z'))
{
j++;
elem += s[j];
}
// cout << "-" << elem << endl;
if (s[j + 1] >= '1' && s[j + 1] <= '9') // 系数
{
j++;
back = s[j] - '0';
while (s[j + 1] >= '0' && s[j + 1] <= '9')
{
j++;
back = back * 10 + s[j] - '0';
}
}
else
{
back = 1;
}
// 计分
if (!num.count(elem))
{
num[elem] = 0;
}
if (left)
{
num[elem] += prior * back;
}
else
{
num[elem] -= prior * back;
}
}
else if (s[j] >= '1' && s[j] <= '9') // 系数
{
prior = s[j] - '0';
while (s[j + 1] >= '0' && s[j + 1] <= '9')
{
j++;
prior = prior * 10 + s[j] - '0';
}
}
else if (s[j] == '=') // 区分方程式左右
{
prior = 1;
back = 1;
left = false;
}
else
{
prior = 1;
back = 1;
}
}
while (!check(num))
{
num = clean(num);
}
map<string, int>::iterator iter;
for (iter = num.begin(); iter != num.end(); iter++)
{
elem = iter->first;
if (num[elem] != 0)
{
return 'N';
}
}
return 'Y';
}
int main(int argc, char const *argv[])
{
string s;
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> s;
cout << func(s) << endl;
}
return 0;
}