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:
#pragma comment(linker, "/STACK:10000000000")
#define forn(from, to, i) for (int i = from; i < to; ++i)
#define fron(from, to, i) for (int i = from; i >= to; --i)
//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC target("avx,avx2")
//#pragma GCC optimize("O3")
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <cstdlib>
#include <stdint.h>
#include <cstdint>
#include <math.h>
#include <cmath>
#include <string>
#include <string.h>
#include <cstring>
#include <vector>
#include <stack>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <bitset>
#include <random>
#include <time.h>
#include <deque>
#include <functional>
#include <iomanip>
#include <chrono>
using namespace std;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
#define int long long
#define m_p make_pair
#define all(x) x.begin(), x.end()
#define pii pair <int, int>
#define pb push_back
#define ff first
#define x1 x11337
#define y1 y11337
#define x0 x01337
#define y0 y01337
#define xn xn1337
#define yn yn1337
#define ss second
#define YES cout << "YES\n"
#define NO cout << "NO\n"
#define GG return 0
#define vi vector<int> 
#define si set<int>
#define spii set<pair<int, int> >
#define mii map<int, int>
#define vvi vector<vi>
#define vpii vector<pii>
#define qi queue<int>
#define qpii queue<pii>
#define pq priority_queue<int>
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
template<typename T> ostream& operator<<(ostream& o, vector<T> x) { for (auto it : x) o << it << ' '; return o; }
template<typename T> istream& operator>>(istream& i, vector<T>& x) { for (auto& it : x) i >> it; return i; }
template <typename T1, typename T2> void chkmin(T1& a, T2 b) { a > b ? a = b : 0; }
template <typename T1, typename T2> void chkmax(T1& a, T2 b) { a < b ? a = b : 0; }
const int INF = 1000000007;
const int INF2 = 100000000000000007;
const int mINF = 1e16;
const int MOD1 = 998244353;
const int MOD = 1000000007;
const int SIZE = 200010;
const int base = 53;
const ldb eps = 1e-6;
const ldb pi = acosl(-1.0);
int add(int a, int b) {
    return ((a + b) % MOD + MOD) % MOD;
}
int mult(int a, int b) {
    return ((a % MOD) * (b % MOD)) % MOD;
}
int binpow(int a, int n) {
    int res = 1;
    while (n) {
        if (n & 1) res = mult(res, a);
        a = mult(a, a);
        n >>= 1;
    }
    return res;
}
int binpow1(int a, int n) {
    int res = 1;
    while (n) {
        if (n & 1) {
            res *= a;
        }
        a *= a;
        n >>= 1;
    }
    return res;
}
int inv(int a) {
    return binpow(a, MOD - 2);
}
int del(int a, int b) {
    return mult(a, inv(b));
}
int gcd(int a, int b) {
    return (b == 0 ? a : gcd(b, a % b));
}
int lcm(int a, int b) {
    return a / gcd(a, b) * b;
}
int ceildiv(int a, int b) {
    return a / b + (a % b != 0);
}
template <typename T>
T sqr(T x) {
    return x * x;
}
int q, n, m, a,b,c, rs,mx,k;
int cnt[26];
si st;
map<char, vi> mp;
signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#ifdef _DEBUG   
    freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
    double cl = clock();
#endif
    cin >> n;
    mp['a'] = { 1,0,0,1,0 };
    mp['b'] = { 1,1,0,2,0 };
    mp['c'] = { 2,0,0,1,1 };
    mp['d'] = { 2,1,0,1,2 };
    mp['e'] = { 1,1,0,1,1 };
    mp['f'] = { 2,1,0,2,1 };
    mp['g'] = { 2,2,0,2,2 };
    mp['h'] = { 1,2,0,2,1 };
    mp['i'] = { 1,1,0,1,1 };
    mp['j'] = { 1,2,0,1,2 };
    mp['k'] = { 1,0,1,2,0 };
    mp['l'] = { 1,1,1,3,0 };
    mp['m'] = { 2,0,1,2,1 };
    mp['n'] = { 2,1,1,2,2 };
    mp['o'] = { 1,1,1,2,1 };
    mp['p'] = { 2,1,1,3,1 };
    mp['q'] = { 2,2,1,3,2 };
    mp['r'] = { 1,2,1,3,1 };
    mp['s'] = { 1,1,1,2,1 };
    mp['t'] = { 1,2,1,2,2 };
    mp['u'] = { 1,0,2,2,1 };
    mp['v'] = { 1,1,2,3,1 };
    mp['w'] = { 1,2,1,1,3 };
    mp['x'] = { 2,0,2,2,2 };
    mp['y'] = { 2,1,2,2,3 };
    mp['z'] = { 1,1,2,2,2 };
    forn(0, n, i) {
        vi kek(5);
        cin >> kek;
        for (auto& j : mp) {
            if (j.ss == kek) {
                cout << j.ff; break;
            }
        }
    }
#ifdef _DEBUG
    cout << "\n\n" << (clock() - cl) / CLOCKS_PER_SEC << " s.\n";
#endif
    GG;
}

//====== READ THIS ======
// 1. Read all the tasks
// 2. Read all the tasks MINDFULLY AGAIN
// 3. Check extreme cases (e.g. N <= 2)
// 4. Check value of SIZE before send an attempt
// 5. Don't sit on a task for a long time if there are no ideas at all
// 6. No tilt, only desire to win
// 7. Remember: #define int long long
//=======================