#include <bits/stdc++.h>
#define NMAX 105
#define CMAX 28
using namespace std;
ifstream fin("logic.in");
ofstream fout("logic.out");
string S[NMAX];
int A[CMAX],B[CMAX],V[NMAX];
bitset < CMAX > v;
bool Calcul(int n,int &p,int a);
bool Not(int n,int &p,int a);
bool Val(int n,int &p,int a);
int Tr(char x){
return x - 'a' + 1;
}
inline bool Descompune(int n,int m,int &N){
int a = 0,b = 0;
for(int i = 1; i <= 26; i++)
A[i] = B[i] = 0;
for(int j = 0; j < S[n].size(); j++)
if(S[n][j] >= 'a' && S[n][j] <= 'z'&& A[Tr(S[n][j])] == 0)
A[Tr(S[n][j])] = ++a;
for(int j = 0; j < S[m].size(); j++){
if(S[m][j] >= 'a' && S[m][j] <= 'z' && B[Tr(S[m][j])] == 0)
B[Tr(S[m][j])] = ++b;
}
for(int i = 1; i <= 26; i++){
if((!A[i] && B[i]) || (!B[i] && A[i])){
for(int j = 1; j <= 26; j++)
A[j] = B[j] = 0;
return 0;
}
if(A[i])
N++;
}
return 1;
}
bool Val(int n,int &p,int a){
bool x = 0;
if(S[n][p] == '('){
x = Calcul(n,++p,a);
p++;
}
if(S[n][p] >= 'a' && S[n][p] <= 'z'){
if(a == 1)
x = V[A[Tr(S[n][p++])]];
else
x = V[B[Tr(S[n][p++])]];
}
return x;
}
bool Not(int n,int &p,int a){
bool x = Val(n,p,a);
while(S[n][p] == '~')
x = !Val(n,++p,a);
return x;
}
bool Calcul(int n,int &p,int a){
bool x = Not(n,p,a);
while(S[n][p] == '&' || S[n][p] == '|' || S[n][p] == '^'){
if(S[n][p] == '&')
x = x & Not(n,++p,a);
if(S[n][p] == '|')
x = x | Not(n,++p,a);
if(S[n][p] == '^')
x = x ^ Not(n,++p,a);
}
return x;
}
bool Bkt(int k,int n,int N,int M){
if(v[1]){
for(int i = 1; i <= k; i++)
V[v[i]] = 1;
int p;
if(Calcul(N,p = 0,1) != Calcul(M,p = 0,2))
return 0;
}
for(int i = v[k] + 1; i <= n; i ++){
v[k + 1] = i;
if(!Bkt(k + 1,n,N,M))
return 0;
}
}
int main()
{
ios :: sync_with_stdio(false);
fin.tie(NULL);
int n,N;
fin >> n;
for(int i = 1; i <= 2 * n; i += 2){
fin >> S[i] >> S[i + 1];
}
for(int i = 1; i <= 2 * n; i += 2){
N = 0;
if(!Descompune(i,i + 1,N)){
fout << "diferite" << "\n";
} else {
for(int i = 1; i <= 11; i++)
V[i] = 0;
if(Bkt(0,N,i,i+ 1))
fout << "egale" << "\n";
else
fout << "diferite" << "\n";
}
}
return 0;
}