#include <stdio.h>
#include <locale.h>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <stdlib.h>
using namespace std;
//setlocale( LC_ALL, "russian_russia.1251" );
/*
int main()
{
setlocale( LC_ALL, "russian_russia.1251" );
}
*/
//*
const int ROWS = 7;
const int COLS = 10;
int array[ ROWS ][ COLS ] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{0, 0, 1, 1, 1, 1, 0, 0, 0, 0 },
{0 ,0 ,1 ,1 ,0 ,1 ,0 ,1 ,0 ,0 },
{0, 0, 1, 1, 1, 1, 0, 1, 1, 0 },
{1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{0, 1, 1, 1, 0, 0, 0, 0, 0, 0 }
};
bool watched[ ROWS ][ COLS ] = { 0 };
struct Rect
{
int left;
int top;
int right;
int bottom;
};
typedef vector< Rect > Objects;
void go( int y, int x, int y_inc, int x_inc, Rect & rect )
{
y = y + y_inc;
x = x + x_inc;
//cout << y << " " << x << endl;
if ( y >= 0 && y < ROWS && x >= 0 && x < COLS )
{
if ( array[ y ][ x ] != 0 && watched[ y ][ x ] == false )
{
//cout << "+" << endl;
watched[ y ][ x ] = true;
rect.left = std::min( rect.left, x );
rect.top = std::min( rect.top, y );
rect.right = std::max( rect.right, x );
rect.bottom = std::max( rect.bottom, y );
go( y, x, -1, -1, rect ); // up left
go( y, x, -1, 0, rect ); // up
go( y, x, -1, 1, rect ); // up right
go( y, x, 0, -1, rect ); // left
go( y, x, 0, 1, rect ); // right
go( y, x, 1, 1, rect ); // down right
go( y, x, 1, 0, rect ); // down
go( y, x, 1, -1, rect ); // down left
}
}
}
int main()
{
Objects objects;
cout << " |";
for ( int x = 0; x < COLS; x++ )
{
cout << " " << x;
}
cout << endl;
cout << "--|";
for ( int x = 0; x < COLS; x++ )
{
cout << "--";
}
cout << endl;
for ( int y = 0; y < ROWS; y++ )
{
cout << y << " | ";
for ( int x = 0; x < COLS; x++ )
{
if ( array[ y ][ x ] != 0 && watched[ y ][ x ] == false )
{
Rect rect;
rect.left = x;
rect.top = y;
rect.right = x;
rect.bottom = y;
go( y, x, 0, 0, rect );
objects.push_back( rect );
}
cout << array[ y ][ x ] << ' ';
}
cout << endl;
}
cout << endl;
for ( Objects::const_iterator it = objects.begin(); it != objects.end(); ++it )
{
const Rect & rect = (*it);
cout << "left = " << rect.left << " top = " << rect.top << " "
<< "right = " << rect.right << " bottom = " << rect.bottom
<< endl;
}
}
//*/
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxsb2NhbGUuaD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c3RkbGliLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vc2V0bG9jYWxlKCBMQ19BTEwsICJydXNzaWFuX3J1c3NpYS4xMjUxIiApOwovKgppbnQgbWFpbigpCnsKICAgIHNldGxvY2FsZSggTENfQUxMLCAicnVzc2lhbl9ydXNzaWEuMTI1MSIgKTsKfQoqLwoKLy8qCmNvbnN0IGludCBST1dTID0gNzsKY29uc3QgaW50IENPTFMgPSAxMDsKaW50IGFycmF5WyBST1dTIF1bIENPTFMgXSA9IHsKICAgIHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCiAgICB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAogICAgezAsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAgfSwKICAgIHswICwwICwxICwxICwwICwxICwwICwxICwwICwwIH0sCiAgICB7MCwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMCB9LAogICAgezEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAgfSwKICAgIHswLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwIH0KfTsKYm9vbCB3YXRjaGVkWyBST1dTIF1bIENPTFMgXSA9IHsgMCB9OwoKCnN0cnVjdCBSZWN0CnsKICAgIGludCBsZWZ0OwogICAgaW50IHRvcDsKICAgIGludCByaWdodDsKICAgIGludCBib3R0b207Cn07CnR5cGVkZWYgdmVjdG9yPCBSZWN0ID4gT2JqZWN0czsKCnZvaWQgZ28oIGludCB5LCBpbnQgeCwgaW50IHlfaW5jLCBpbnQgeF9pbmMsIFJlY3QgJiByZWN0ICkKewogICAgeSA9IHkgKyB5X2luYzsKICAgIHggPSB4ICsgeF9pbmM7CiAgICAvL2NvdXQgPDwgeSA8PCAiICIgPDwgeCA8PCBlbmRsOwogICAgaWYgKCB5ID49IDAgJiYgeSA8IFJPV1MgJiYgeCA+PSAwICYmIHggPCBDT0xTICkKICAgIHsKICAgICAgICBpZiAoIGFycmF5WyB5IF1bIHggXSAhPSAwICYmIHdhdGNoZWRbIHkgXVsgeCBdID09IGZhbHNlICkKICAgICAgICB7CiAgICAgICAgICAgIC8vY291dCA8PCAiKyIgPDwgZW5kbDsKICAgICAgICAgICAgd2F0Y2hlZFsgeSBdWyB4IF0gPSB0cnVlOwogICAgICAgICAgICByZWN0LmxlZnQgPSBzdGQ6Om1pbiggcmVjdC5sZWZ0LCB4ICk7CiAgICAgICAgICAgIHJlY3QudG9wID0gc3RkOjptaW4oIHJlY3QudG9wLCB5ICk7CiAgICAgICAgICAgIHJlY3QucmlnaHQgPSBzdGQ6Om1heCggcmVjdC5yaWdodCwgeCApOwogICAgICAgICAgICByZWN0LmJvdHRvbSA9IHN0ZDo6bWF4KCByZWN0LmJvdHRvbSwgeSApOwogICAgICAgICAgICBnbyggeSwgeCwgLTEsIC0xLCByZWN0ICk7IC8vIHVwIGxlZnQKICAgICAgICAgICAgZ28oIHksIHgsIC0xLCAwLCByZWN0ICk7ICAvLyB1cAogICAgICAgICAgICBnbyggeSwgeCwgLTEsIDEsIHJlY3QgKTsgIC8vIHVwIHJpZ2h0CiAgICAgICAgICAgIGdvKCB5LCB4LCAwLCAtMSwgcmVjdCApOyAgLy8gbGVmdAogICAgICAgICAgICBnbyggeSwgeCwgMCwgMSwgcmVjdCApOyAgIC8vIHJpZ2h0CiAgICAgICAgICAgIGdvKCB5LCB4LCAxLCAxLCByZWN0ICk7ICAgLy8gZG93biByaWdodAogICAgICAgICAgICBnbyggeSwgeCwgMSwgMCwgcmVjdCApOyAgIC8vIGRvd24KICAgICAgICAgICAgZ28oIHksIHgsIDEsIC0xLCByZWN0ICk7ICAvLyBkb3duIGxlZnQKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgT2JqZWN0cyBvYmplY3RzOwogICAgY291dCA8PCAiICB8IjsKICAgIGZvciAoIGludCB4ID0gMDsgeCA8IENPTFM7IHgrKyApCiAgICB7CiAgICAgICAgY291dCA8PCAiICIgPDwgeDsKICAgIH0KICAgIGNvdXQgPDwgZW5kbDsKICAgIGNvdXQgPDwgIi0tfCI7CiAgICBmb3IgKCBpbnQgeCA9IDA7IHggPCBDT0xTOyB4KysgKQogICAgewogICAgICAgIGNvdXQgPDwgIi0tIjsKICAgIH0KICAgIGNvdXQgPDwgZW5kbDsKICAgIGZvciAoIGludCB5ID0gMDsgeSA8IFJPV1M7IHkrKyApCiAgICB7CiAgICAgICAgY291dCA8PCB5IDw8ICIgfCAiOwogICAgICAgIGZvciAoIGludCB4ID0gMDsgeCA8IENPTFM7IHgrKyApCiAgICAgICAgewogICAgICAgICAgICBpZiAoIGFycmF5WyB5IF1bIHggXSAhPSAwICYmIHdhdGNoZWRbIHkgXVsgeCBdID09IGZhbHNlICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgUmVjdCByZWN0OwogICAgICAgICAgICAgICAgcmVjdC5sZWZ0ID0geDsKICAgICAgICAgICAgICAgIHJlY3QudG9wID0geTsKICAgICAgICAgICAgICAgIHJlY3QucmlnaHQgPSB4OwogICAgICAgICAgICAgICAgcmVjdC5ib3R0b20gPSB5OwogICAgICAgICAgICAgICAgZ28oIHksIHgsIDAsIDAsIHJlY3QgKTsKICAgICAgICAgICAgICAgIG9iamVjdHMucHVzaF9iYWNrKCByZWN0ICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291dCA8PCBhcnJheVsgeSBdWyB4IF0gPDwgJyAnOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7IAogICAgfQogICAgY291dCA8PCBlbmRsOwogICAgZm9yICggT2JqZWN0czo6Y29uc3RfaXRlcmF0b3IgaXQgPSBvYmplY3RzLmJlZ2luKCk7IGl0ICE9IG9iamVjdHMuZW5kKCk7ICsraXQgKQogICAgewogICAgICAgIGNvbnN0IFJlY3QgJiByZWN0ID0gKCppdCk7CiAgICAgICAgY291dCA8PCAibGVmdCA9ICIgPDwgcmVjdC5sZWZ0IDw8ICIgdG9wID0gIiA8PCByZWN0LnRvcCA8PCAiICIKICAgICAgICAgICAgIDw8ICJyaWdodCA9ICIgPDwgcmVjdC5yaWdodCA8PCAiIGJvdHRvbSA9ICIgPDwgcmVjdC5ib3R0b20KICAgICAgICAgICAgIDw8IGVuZGw7CiAgICB9Cn0KLy8qLwo=