# include <iostream>
# include <string>
# include <queue>
using namespace std;
bool check ( queue <int> a, int b)
{
bool pok=0;
for (int i=0; i<=a.size(); i++)
{
int k=a.front();
if (k==b) pok=1;
a.pop();
}
return pok;
}
int main ()
{setlocale(LC_ALL, "Ukrainian");
//шахова дошка. спочатку всі клітинки 0; якщо відвідали, то -1; якщо занесли у чергу 1
int mas[8][8];
for ( int i=0; i<8; i++)
for ( int j=0; j<8; j++)
mas[i][j]=0;
//сталі варіанти переходів конем
int moves[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
//черга клітинок, які перевіряються
queue <int> places;
//вводимо з клавіатури початкову клітинку
int k;
cin >> k;
// заносимо клітинку в чергу
places.push(k);
//поки черга не порожня
while (places.empty()!=true)
{
//номер клітинки на цифри
int a=int(k/10);
int b=k%10;
//позначаємо клітинку відвіданою
mas[a][b]=-1;
//перевіряємо можливі шляхи з поточної клітинки , всього 8
for (int i=0; i<8; i++)
{
//координата нової клітинки
int na=a+moves[i][0];
int nb=b+moves[i][1];
//номер клітинки одним числом
int nk=na*10+nb;
//якщо цей варіант не виходить за межі дошки
if ((na>=0)&&(na<=7)&&(nb>=0)&& (nb<=7))
//якщо варіант не розглядався раніше
if (mas[na][nb]==0)
// якщо цей варіант не зустрічається в черзі
if(check (places, nk)==false)
{
//записуємо в чергу
places.push(nk);
//змінюємо значення на дошці
mas[na][nb]=1;
}
}
// друкуємо перевірену клітинку
cout <<places.front()<<"викреслено "<<endl;
// видаляємо перевірену клітинку з черги
places.pop();
// якщо черга ще не порожня, переходимо до наступного її елемента
if (places.empty()!=true)
k=places.front();
}
system ("pause");
return 0;
}