#CSP2019-12-3化学方程式,测试点全过的情况下只有三十分。
#include<bits/stdc++.h>
using namespace std;
struct Ti{//结构体里面包括一个待定字符串和数字。可以对标元素及其数量
string s0="";
int count=0;//这个为多位数字到底是几位,像100,count为3,字母和符号都是0
int location=-1;
int sum=0;//这个是字母的个数;
int flag=0;
int bracketflag=0;
int bracketflag1=0;
};
int getCharacter(struct Ti ti[],int size){//获取等号
for(int i=0;i<size;i++){
if(ti[i].s0[0]=='=') return i;
}
}
void numchange(struct Ti ti[],int size){//数字转化函数
for(int i=0;i<=size;i++){
int s=0;
if(ti[i].count>0){
for (int j = 0; j < ti[i].count; j++) {
int s01=ti[i].s0[j];
s01-='0';
s+=s01*pow(10,ti[i].count-j-1);
}
ti[i].count = s;
}
}
}
void getFirst(struct Ti ti[],int size,int flag0){//系数处理函数
int t=0; int p=0;
for(int i=0;i<=size;i++){
if(ti[0].count>0){
// cout<<ti[i].flag<<endl;
if(ti[i].flag==1) t=1;
if(t==0){
if(ti[i].sum==1) {
ti[i].sum*=ti[0].count;
}
}
}
else if(ti[i].flag==1){
// cout<<ti[i].flag<<endl;
t=1;
}
// cout<<t<<endl;
// if(t>0) cout<<" 执行0"<<endl;
if(t>0&&t<=flag0&&ti[i].flag==t){
// cout<<t<<endl;
p=i+1;t++;
}
if(ti[p].count>0){
if(ti[i].sum==1){
ti[i].sum*=ti[p].count;
}
}
}
}
void getbehind(struct Ti ti[],int size){//处理单一元素后面的数字(即该数字只表示一个元素的数值)
for(int i=0;i<=size;i++){
if(ti[i].count>0&&ti[i-1].sum>0){
ti[i-1].sum*=ti[i].count;
}
}
}
void getbracketbehind(struct Ti ti[],int size,int bracketflag0){ //如 (Au(CN)2)
int p=1,t=1;
for(int i=size;i>0;i--){
if(ti[i].count>0&&ti[i-1].bracketflag1==1){
t=ti[i].count;p*=t;
}
if(p>1&&ti[i].sum>0) ti[i].sum*=p;
if(ti[i].bracketflag1==-1){
p/=t;
for(int j=i;j<size;j++){
if(ti[j].bracketflag1==1&&ti[j].bracketflag==ti[i].bracketflag+2&&ti[j+1].count>1){
t=ti[j+1].count;break;
}
}
}
}
}
bool statistics(struct Ti ti[],int size){
int f=0;
int isolation=getCharacter(ti,size);
// cout<<isolation<<endl;
for (int i=0;i<isolation;i++){
if(ti[i].sum>0){
for(int j=i+1;j<isolation;j++){
if(ti[j].s0[0]==ti[i].s0[0]){
if((ti[j].s0[1]>='a'&&ti[j].s0[1]<='z')&&ti[j].s0[1]==ti[i].s0[1]){
// cout<<"true"<<" "<<j<<" "<<i<<" "<<ti[j].sum<<" "<<ti[i].sum<<" "<<ti[j].s0[1]<<" "<<ti[i].s0[1]<<endl;
ti[i].sum+=ti[j].sum;
ti[j].sum=0;
}
if((ti[j].s0[1]<'a'||ti[j].s0[1]>'z')&&(ti[i].s0[1]<'a'||ti[i].s0[1]>'z')){
ti[i].sum+=ti[j].sum;
ti[j].sum=0;
}
}
}
}
}
for(int i=isolation+1;i<=size;i++){
if(ti[i].sum>0){
for(int j=i+1;j<=size;j++){
if(ti[j].s0[0]==ti[i].s0[0]){
if((ti[j].s0[1]>='a'&&ti[j].s0[1]<='z')&&ti[j].s0[1]==ti[i].s0[1]){
// cout<<"true"<<" "<<j<<" "<<i<<" "<<ti[j].sum<<" "<<ti[i].sum<<" "<<ti[j].s0[1]<<" "<<ti[i].s0[1]<<endl;
ti[i].sum+=ti[j].sum;
ti[j].sum=0;
}
if((ti[j].s0[1]<='a'||ti[j].s0[1]>='z')&&(ti[i].s0[1]<'a'||ti[i].s0[1]>'z')){
ti[i].sum+=ti[j].sum;
ti[j].sum=0;
}
}
}
}
}
for(int i=0;i<isolation;i++){
if(ti[i].sum>0){
for(int j=isolation+1;j<=size;j++){
if(ti[i].sum>0){
if(ti[j].s0[0]==ti[i].s0[0]){
if((ti[j].s0[1]>='a'&&ti[j].s0[1]<='z')&&ti[j].s0[1]==ti[i].s0[1]){
if(ti[i].sum!=ti[j].sum) f++;
ti[i].sum=0;ti[j].sum=0;
}
if((ti[j].s0[1]<'a'||ti[j].s0[1]>'z')&&(ti[i].s0[1]<'a'||ti[i].s0[1]>'z')){
if(ti[i].sum!=ti[j].sum) f++;
ti[i].sum=0;ti[j].sum=0;
}
}
}
}
}
}
for(int i=0;i<=size;i++){
if(ti[i].sum>0) f++;
}
if(f==0) return true;
else return false;
}
int main(){
int n;cin>>n;string s;
for(int i=0;i<n;i++){
cin>>s;Ti ti[1000];int ti0=0;int flag0=0;int bracketflag0=0;int z=0;
for(int j=0;j<s.length();j++){
//存储函数,多位数字的location显示的是最右边数字的位置,大小写元素的位置显示的是大写字母位置,也就是前端位置
if(s[j]=='+'||s[j]=='='||s[j]=='('||s[j]==')'){
if(s[j-1]>='0'&&s[j-1]<='9') ti0++;
if(s[j]=='+'||s[j]=='=') {
if((s[j]=='+'&&s[j+1]=='+')||(s[j]=='='&&s[j+1]=='=') ) z++;
flag0++;ti[ti0].flag=flag0;
}
if(s[j]=='('||s[j]==')') {
bracketflag0++;ti[ti0].bracketflag=bracketflag0;
if(s[j]=='(') ti[ti0].bracketflag1=-1;
if(s[j]==')') ti[ti0].bracketflag1=1;
}
ti[ti0].s0+=s[j];
ti[ti0].location=j;
ti0++;
}
if(s[j]>='A'&&s[j]<='Z'){
if(s[j-1]>='0'&&s[j-1]<='9') ti0++;
ti[ti0].s0+=s[j];
if(s[j+1]>='a'&&s[j+1]<='z'){ti[ti0].s0+=s[j+1];}
ti[ti0].location=j;ti[ti0].sum=1;
if(j!=s.length()-1) ti0++;
if((s[j+1]>='a'&&s[j+1]<='z')&&j==s.length()-2)ti0--;
}
if(s[j]>='0'&&s[j]<='9'){
ti[ti0].s0+=s[j];
ti[ti0].location=j;//这个j应该是右值位置
ti[ti0].count++;
}
}
numchange(ti,ti0);
getFirst(ti,ti0,flag0);
getbehind(ti,ti0);
getbracketbehind(ti,ti0,bracketflag0);
bool f=statistics(ti,ti0);
// for(int i0=0;i0<=ti0;i0++){
// cout<<ti[i0].s0<<" "<<ti[i0].count<<" "<<" "<<ti[i0].sum<<" "<<ti[i0].flag<<" "<<ti[i0].bracketflag<<" "<<ti[i0].location<<endl;
// }
if(z>0) f=false;
if(f==true) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
return 0;
}