Problem: 

Input

The first line of the input contains a single integer N (1 ≤ N ≤ 24). The next N lines contain 5 space-separated integers each. The first three integers will be between 0 and 2, inclusive. The last two integers will be between 0 and 3, inclusive. The sum of the first three integers will be equal to the sum of the last two integers.

Output

Output the result – a string of lowercase English letters.

Examples

Input


1
1 0 0 1 0


Output


a


Input


10
2 0 0 1 1
1 1 1 2 1
2 1 0 1 2
1 1 0 1 1
2 1 0 2 1
1 1 1 2 1
1 2 1 3 1
2 0 0 1 1
1 1 0 1 1
1 1 2 2 2


Output


codeforcez

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;

#define ll           long long
#define rep(i, a, n) for (ll i = a; i < n; i++)
#define pb           push_back
#define ppb          pop_back()
#define sz(x)        (int)((x).size())
#define mp           make_pair
#define ss           second
#define ff           first
#define all(a)       a.begin(), a.end()
#define flush        fflush(stdout)
#define endl         "\n"
#define mem(a, b)    memset(a, b, sizeof(a))
#define mod          1000000007
#define INF          2000000000000000
long double pi =     3.1415927535897932384626433;

template <typename T, typename U> static inline void amin(T &x, U y){ if (y < x)x = y;}
template <typename T, typename U> static inline void amax(T &x, U y){ if (x < y)x = y;}


ll cdiv(ll a, ll b)      { return a / b + ((a ^ b) > 0 && a % b); } 
ll fdiv(ll a, ll b)      { return a / b - ((a ^ b) < 0 && a % b); } 
ll max(ll a, ll b, ll c) { return max(a, max(b, c)); }
ll min(ll a, ll b, ll c) { return min(a, min(b, c)); }


ll gcd(ll a, ll b)
{if (b == 0)return (a);
      else return (gcd(b, a % b));
}


/*#define runSieve
bool prime[10000005];
ll hah[10000005];
void sieve(ll n = 10000002)
{ mem(prime, true);
      mem(hah, 0);
      for (ll p = 2; p * p <= n; p++)
      {if (prime[p] == true)
            {hah[p] = p;
                  for (ll i = p * p; i <= n; i += p)
                  { prime[i] = false;
                        if (hah[i] == 0)
                              hah[i] = p;
                  } 
             }
       }
 }
*/

//#define NCR
/*ll nck[200010][110];
void initialize(){
for (int n1=0;n1<200010;n1++) {
  nck[n1][0]=1;
  for (int k=1;k<=min(n1,100);k++){
   nck[n1][k]=(nck[n1-1][k]+nck[n1-1][k-1])%mod;
  }
 }
}
*/

//THE ACTUAL CODE BEGINS FROM HERE ONWARDS :

void _good_for_nothing_()
{
      ll n;
      cin >> n;
      ll num[n][5];
      rep(i,0,n){
            rep(j, 0, 5) cin >> num[i][j];
      }
      map<char, vector<ll>> m;
      m['a'] = {1, 0, 0, 1, 0};
      m['b'] = {1, 1, 0, 2, 0};
      m['c'] = {2, 0, 0, 1, 1};
      m['d'] = {2, 1, 0, 1, 2};
      m['e'] = {1, 1, 0, 1, 1};
      m['f'] = {2, 1, 0, 2, 1};
      m['g'] = {2, 2, 0, 2, 2};
      m['h'] = {1, 2, 0, 2, 1};
      m['i'] = {1, 1, 0, 1, 1};
      m['j'] = {1, 2, 0, 1, 2};
      m['k'] = {1, 0, 1, 2, 0};
      m['l'] = {1, 1, 1, 3, 0};
      m['m'] = {2, 0, 1, 2, 1};
      m['n'] = {2, 1, 1, 2, 2};
      m['o'] = {1, 1, 1, 2, 1};
      m['p'] = {2, 1, 1, 3, 1};
      m['q'] = {2, 2, 1, 3, 2};
      m['r'] = {1, 2, 1, 3, 1};
      m['s'] = {1, 1, 1, 2, 1};
      m['t'] = {1, 2, 1, 2, 2};
      m['u'] = {1, 0, 2, 2, 1};
      m['v'] = {1, 1, 2, 3, 1};
      m['w'] = {1, 2, 1, 1, 3};
      m['x'] = {2, 0, 2, 2, 2};
      m['y'] = {2, 1, 2, 2, 3};
      m['z'] = {1, 1, 2, 2, 2};
      rep(i,0,n){
      for (auto x : m)
      {
            if(num[i][0]==x.ss[0] and num[i][1]==x.ss[1] and num[i][2]==x.ss[2] and num[i][3]==x.ss[3] and num[i][4]==x.ss[4])
                  {cout << x.ff;
                        break;}
      }
}
}

signed main()
{
      ios_base::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
#ifdef runSieve
      sieve();
#endif
#ifdef NCR
      initialize();
#endif
      ll TESTS = 1;
    // cin >> TESTS;
      while (TESTS--)
            _good_for_nothing_();
                 return 0;
}