#include <iostream>
using namespace std;
int n;
string grid[30];
int dx[] = {1, 1, 1, 0, -1, -1, -1, 0};
int dy[] = {-1, 0, 1, 1, 1, 0, -1, -1};
void display() {
for(int i = 0; i < n; i++)
cout << grid[i] << endl;
cout << endl;
}
void ff(int x, int y) {
grid[x][y] = '2';
display();
for(int i = 0; i < 8; i++) {
int xx = x+dx[i];
int yy = y+dy[i];
if(xx >= 0 && xx < n
&& yy >= 0 && yy < n
&& grid[xx][yy] == '1')
ff(xx, yy);
}
// (x+1, y), (x+1,y+1), ...
}
int main() {
// review: bfs vs dfs
// review: representasi graph dalam coding
// literal vs implicit graph
// 1. adjacency matrix
/*
int adjMat[100][100];
1 2 3 4 5 6
1 0 1 0 1 0 0
2 1 0 1 1 0 0
3 0 1 0 0 1 0
4 1 1 0 0 1 0
5 0 0 1 1 0 1
6 0 0 0 0 1 0
*/
// 2. adjacency list
/*
vector<int> adjList[100];
1: 2, 4
2: 1, 3, 4
3: 2, 5
4: 1, 2, 5
5: 3, 4, 6
6: 5
*/
// 3. edge list
/*
vector<pair<int, int> > edgeList;
(1, 2)
(1, 4)
(2, 1)
(2, 3)
(2, 4)
...
*/
// flood fill
int casenum = 1;
while(cin >> n) {
for(int i = 0; i < n; i++)
cin >> grid[i];
int counter = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(grid[i][j] == '1') {
counter++;
ff(i, j);
}
cout << "Image number " << casenum++ << " contains " << counter << " war eagles." << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG47CnN0cmluZyBncmlkWzMwXTsKCmludCBkeFtdID0gezEsIDEsIDEsIDAsIC0xLCAtMSwgLTEsIDB9OwppbnQgZHlbXSA9IHstMSwgMCwgMSwgMSwgMSwgMCwgLTEsIC0xfTsKCnZvaWQgZGlzcGxheSgpIHsKCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgkJY291dCA8PCBncmlkW2ldIDw8IGVuZGw7Cgljb3V0IDw8IGVuZGw7Cn0KCnZvaWQgZmYoaW50IHgsIGludCB5KSB7CglncmlkW3hdW3ldID0gJzInOwoJZGlzcGxheSgpOwoJZm9yKGludCBpID0gMDsgaSA8IDg7IGkrKykgewoJCWludCB4eCA9IHgrZHhbaV07CgkJaW50IHl5ID0geStkeVtpXTsKCQlpZih4eCA+PSAwICYmIHh4IDwgbgoJCSYmIHl5ID49IDAgJiYgeXkgPCBuCgkJJiYgZ3JpZFt4eF1beXldID09ICcxJykKCQkJZmYoeHgsIHl5KTsKCX0KCS8vICh4KzEsIHkpLCAoeCsxLHkrMSksIC4uLgp9CgkKaW50IG1haW4oKSB7CgkvLyByZXZpZXc6IGJmcyB2cyBkZnMKCS8vIHJldmlldzogcmVwcmVzZW50YXNpIGdyYXBoIGRhbGFtIGNvZGluZwoJLy8gbGl0ZXJhbCB2cyBpbXBsaWNpdCBncmFwaAoJLy8gMS4gYWRqYWNlbmN5IG1hdHJpeAoJLyoKCWludCBhZGpNYXRbMTAwXVsxMDBdOwoJICAxIDIgMyA0IDUgNgoJMSAwIDEgMCAxIDAgMAoJMiAxIDAgMSAxIDAgMAoJMyAwIDEgMCAwIDEgMAoJNCAxIDEgMCAwIDEgMAoJNSAwIDAgMSAxIDAgMQoJNiAwIDAgMCAwIDEgMAoJKi8KCS8vIDIuIGFkamFjZW5jeSBsaXN0CgkvKgoJdmVjdG9yPGludD4gYWRqTGlzdFsxMDBdOwoJMTogMiwgNAoJMjogMSwgMywgNAoJMzogMiwgNQoJNDogMSwgMiwgNQoJNTogMywgNCwgNgoJNjogNQoJKi8KCS8vIDMuIGVkZ2UgbGlzdAoJLyoKCXZlY3RvcjxwYWlyPGludCwgaW50PiA+IGVkZ2VMaXN0OwoJKDEsIDIpCgkoMSwgNCkKCSgyLCAxKQoJKDIsIDMpCgkoMiwgNCkKCS4uLgoJKi8KCQoJLy8gZmxvb2QgZmlsbAoJaW50IGNhc2VudW0gPSAxOwoJd2hpbGUoY2luID4+IG4pIHsKCQlmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJCQljaW4gPj4gZ3JpZFtpXTsKCQlpbnQgY291bnRlciA9IDA7CgkJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKCQkJZm9yKGludCBqID0gMDsgaiA8IG47IGorKykKCQkJCWlmKGdyaWRbaV1bal0gPT0gJzEnKSB7CgkJCQkJY291bnRlcisrOwoJCQkJCWZmKGksIGopOwoJCQkJfQoJCWNvdXQgPDwgIkltYWdlIG51bWJlciAiIDw8IGNhc2VudW0rKyA8PCAiIGNvbnRhaW5zICIgPDwgY291bnRlciA8PCAiIHdhciBlYWdsZXMuIiA8PCBlbmRsOwoJfQoJcmV0dXJuIDA7Cn0=