#include <iostream>
#include <vector>
using namespace std;
bool mp[101][101] = {false};
int dx[] = {1, 0, -1, 0};
int dy[] = {0, -1, 0, 1};
bool isValid(int x, int y) {
return x >= 0 && x <= 100 && y >= 0 && y <= 100;
}
pair<int, int> turn(pair<int, int> o, pair<int, int>& p) {
auto c = make_pair(p.first-o.first, p.second-o.second);
return make_pair(o.first+c.second, o.second-c.first);
}
void func(int x, int y, int d, int g) {
vector<pair<int, int>> v;
v.push_back({x, y});
v.push_back({x+dx[d], y+dy[d]});
while(g--) {
auto o = v.back();
for(int i = v.size()-2; i >= 0; i--)
v.push_back(turn(o, v[i]));
}
for(auto& p : v) {
if(isValid(p.first, p.second))
mp[p.second][p.first] = true;
}
}
int check() {
int result = 0;
for(int y = 0; y < 50; y++) {
for(int x = 0; x < 50; x++) {
cout << (mp[y][x] ? 1 : 0);
if(mp[y][x] && mp[y+1][x] && mp[y][x+1] && mp[y+1][x+1])
result++;
} cout << endl;
}
return result;
}
int main() {
int t;
cin >> t;
while(t--) {
int x, y, d, g;
cin >> x >> y >> d >> g;
func(x, y, d, g);
}
cout << check();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBtcFsxMDFdWzEwMV0gPSB7ZmFsc2V9OwppbnQgZHhbXSA9IHsxLCAwLCAtMSwgMH07CmludCBkeVtdID0gezAsIC0xLCAwLCAxfTsKCmJvb2wgaXNWYWxpZChpbnQgeCwgaW50IHkpIHsKICAgIHJldHVybiB4ID49IDAgJiYgeCA8PSAxMDAgJiYgeSA+PSAwICYmIHkgPD0gMTAwOwp9CgpwYWlyPGludCwgaW50PiB0dXJuKHBhaXI8aW50LCBpbnQ+IG8sIHBhaXI8aW50LCBpbnQ+JiBwKSB7CiAgICBhdXRvIGMgPSBtYWtlX3BhaXIocC5maXJzdC1vLmZpcnN0LCBwLnNlY29uZC1vLnNlY29uZCk7CiAgICByZXR1cm4gbWFrZV9wYWlyKG8uZmlyc3QrYy5zZWNvbmQsIG8uc2Vjb25kLWMuZmlyc3QpOwp9Cgp2b2lkIGZ1bmMoaW50IHgsIGludCB5LCBpbnQgZCwgaW50IGcpIHsKICAgIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gdjsKICAgIHYucHVzaF9iYWNrKHt4LCB5fSk7CiAgICB2LnB1c2hfYmFjayh7eCtkeFtkXSwgeStkeVtkXX0pOwogICAgCiAgICB3aGlsZShnLS0pIHsKICAgICAgICBhdXRvIG8gPSB2LmJhY2soKTsKICAgICAgICBmb3IoaW50IGkgPSB2LnNpemUoKS0yOyBpID49IDA7IGktLSkKICAgICAgICAgICAgdi5wdXNoX2JhY2sodHVybihvLCB2W2ldKSk7CiAgICB9CiAgICAKICAgIGZvcihhdXRvJiBwIDogdikgewogICAgICAgIGlmKGlzVmFsaWQocC5maXJzdCwgcC5zZWNvbmQpKQogICAgICAgICAgICBtcFtwLnNlY29uZF1bcC5maXJzdF0gPSB0cnVlOwogICAgfQp9CgppbnQgY2hlY2soKSB7CiAgICBpbnQgcmVzdWx0ID0gMDsKICAgIGZvcihpbnQgeSA9IDA7IHkgPCA1MDsgeSsrKSB7CiAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IDUwOyB4KyspIHsKICAgICAgICAgICAgY291dCA8PCAobXBbeV1beF0gPyAxIDogMCk7CiAgICAgICAgICAgIGlmKG1wW3ldW3hdICYmIG1wW3krMV1beF0gJiYgbXBbeV1beCsxXSAmJiBtcFt5KzFdW3grMV0pCiAgICAgICAgICAgICAgICByZXN1bHQrKzsKICAgICAgICB9IGNvdXQgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkgewogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlKHQtLSkgewogICAgICAgIGludCB4LCB5LCBkLCBnOwogICAgICAgIGNpbiA+PiB4ID4+IHkgPj4gZCA+PiBnOwogICAgICAgIGZ1bmMoeCwgeSwgZCwgZyk7CiAgICB9CiAgICBjb3V0IDw8IGNoZWNrKCk7CiAgICByZXR1cm4gMDsKfQ==