#include <iostream>
#include <array>
#include <string>
#include <locale>

template<typename T, size_t N, size_t M>
std::string find(T ch, const std::array<std::array<T, N>, M> &arr)
{
	for (size_t i = 1; i < N; ++i)
	{
		for (size_t j = 1; j < M; ++j)
		{
			if (ch == arr[i][j])
			{
				return std::string{ arr[i][0], arr[0][j] };
			}
		}
	}
	return std::string(" ");
}

int main()
{
	constexpr std::array<std::array<char, 6>, 6> arr =   {  ' ', 'A', 'B', 'C', 'D', 'E' ,
															'A', 'A', 'B', 'C', 'D', 'E' , 
															'B', 'F', 'G', 'H', 'I', 'K' , 
															'C', 'L', 'M', 'N', 'O', 'P' , 
															'D', 'Q', 'R', 'S', 'T', 'U' , 
															'E', 'V', 'W', 'X', 'Y', 'Z' 
													     };

	std::string text = "HELLO";
	std::locale loc;
	for (auto i = text.begin(); i != text.end(); ++i)
	{
		*i = std::toupper(*i, loc);
		if (*i == 'J')
			*i = 'I';
	}

	std::string result;
	result.reserve(text.size() * 3);

	for (auto i : text)
	{
		result.append(find(i, arr)).append(" ");
	}

	std::cout << result.c_str() << std::endl;
	getchar();

	return 0;
}