{code:title=cell1.cpp\|borderStyle=solid}
#include <bits/stdc++.h>
using namespace std;

struct moves
{
int x;
int y;
};
queue <moves> MQue;

bool Marked[8][8];

void StartProcess()
{
for (int i=0; i<8; i++)
for (int j=0; j<8; j++) Marked[i][j]=false;
int n;
cin >> n;
for (int i=0; i<n; i++)
{
int x,y;
cin >> x >> y;
Marked[x-1][y-1]=true;
}
}

bool Found(int &x, int &y)
{
for (int i=0; i<8; i++)
for (int j=0; j<8; j++)
if (not Marked[i][j])
{ x=i; y=j; return true;};
return false;
}

void PutAll(moves CurrMove)
{
int steps[4][2] = {{0,-1},{0,1},{-1,0},{1,0}};
for (int i=0; i<4; i++)
{
moves Cur;
Cur.x=CurrMove.x+steps[i][0];
Cur.y=CurrMove.y+steps[i][1];
if ((Cur.x>=0) && (Cur.x<8) &&
(Cur.y>=0) && (Cur.y<8) &&
(not Marked[Cur.x][Cur.y]))
{MQue.push(Cur); Marked[Cur.x][Cur.y]=true;};
}
}

int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
StartProcess();
int PieceNumber=0,x,y;
while (Found(x,y))
{
PieceNumber++;
moves StartMove; StartMove.x=x; StartMove.y=y;
MQue.push(StartMove); Marked[x][y]=true;
while (not MQue.empty())
{
moves CurrMove=MQue.front(); MQue.pop();
PutAll(CurrMove);
}
}
cout << PieceNumber; }
{code}\\
{code:title=cell2.cpp\|borderStyle=solid}
#include <bits/stdc++.h>using namespace std;

queue <int> X,Y; // Две очереди по одному числу

bool Marked[8][8];

void StartProcess()
{
for (int i=0; i<8; i++)
for (int j=0; j<8; j++) Marked[i][j]=false;
int n;
cin >> n;
for (int i=0; i<n; i++)
{
int x,y;
cin >> x >> y;
Marked[x-1][y-1]=true;
}
}

bool Found(int &x, int &y)
{
for (int i=0; i<8; i++)
for (int j=0; j<8; j++)
if (not Marked[i][j])
{ x=i; y=j; return true;};
return false;
}

void PutAll(int x, int y)
{
int steps[4][2] = {{0,-1},{0,1},{-1,0},{1,0}};
for (int i=0; i<4; i++)
{
int Cx=x+steps[i][0];
int Cy=y+steps[i][1];
if ((Cx>=0) && (Cx<8) &&
(Cy>=0) && (Cy<8) &&
(not Marked[Cx][Cy]))
{X.push(Cx); Y.push(Cy); Marked[Cx][Cy]=true;};
}
}

int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
StartProcess();
int PieceNumber=0,x,y;
while (Found(x,y))
{
PieceNumber++;
X.push(x); Y.push(y); Marked[x][y]=true;
while (not X.empty())
{
x=X.front(); X.pop();
y=Y.front(); Y.pop();
PutAll(x,y);
}
}
cout << PieceNumber; }
{code}\\