#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) {
cout << "o" << o.first << "," << o.second << endl;
cout << "p" << p.first << "," << p.second << endl;
auto c = make_pair(p.first-o.first, p.second-o.second);
cout << "c" << c.first << "," << c.second << endl;
cout << "r" << o.first-c.second << "," << o.second+c.first << endl << endl;
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) {
cout << p.first << "," << p.second << endl;
if(isValid(p.first, p.second))
mp[p.second][p.first] = true;
}
cout << endl;
}
int check() {
int result = 0;
for(int y = 0; y < 100; y++) {
for(int x = 0; x < 100; x++)
if(mp[y][x] && mp[y+1][x] && mp[y][x+1] && mp[y+1][x+1]) {
result++;
cout << x <<","<< y << endl;
}
}
return result;
}
int main() {
int t;
cin >> t;
while(t--) {
int x, y, d, g;
cin >> x >> y >> d >> g;
func(x, 100-y, d, g);
}
cout << check();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBtcFsxMDFdWzEwMV0gPSB7ZmFsc2V9OwppbnQgZHhbXSA9IHsxLCAwLCAtMSwgMH07CmludCBkeVtdID0gezAsIC0xLCAwLCAxfTsKCmJvb2wgaXNWYWxpZChpbnQgeCwgaW50IHkpIHsKICAgIHJldHVybiB4ID49IDAgJiYgeCA8PSAxMDAgJiYgeSA+PSAwICYmIHkgPD0gMTAwOwp9CgpwYWlyPGludCwgaW50PiB0dXJuKHBhaXI8aW50LCBpbnQ+IG8sIHBhaXI8aW50LCBpbnQ+JiBwKSB7CiAgICBjb3V0IDw8ICJvIiA8PCBvLmZpcnN0IDw8ICIsIiA8PCBvLnNlY29uZCA8PCBlbmRsOwogICAgY291dCA8PCAicCIgPDwgcC5maXJzdCA8PCAiLCIgPDwgcC5zZWNvbmQgPDwgZW5kbDsKICAgIGF1dG8gYyA9IG1ha2VfcGFpcihwLmZpcnN0LW8uZmlyc3QsIHAuc2Vjb25kLW8uc2Vjb25kKTsKICAgIGNvdXQgPDwgImMiIDw8IGMuZmlyc3QgPDwgIiwiIDw8IGMuc2Vjb25kIDw8IGVuZGw7CiAgICBjb3V0IDw8ICJyIiA8PCBvLmZpcnN0LWMuc2Vjb25kIDw8ICIsIiA8PCBvLnNlY29uZCtjLmZpcnN0IDw8IGVuZGwgPDwgZW5kbDsKICAgIHJldHVybiBtYWtlX3BhaXIoby5maXJzdC1jLnNlY29uZCwgby5zZWNvbmQrYy5maXJzdCk7Cn0KCnZvaWQgZnVuYyhpbnQgeCwgaW50IHksIGludCBkLCBpbnQgZykgewogICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiB2OwogICAgdi5wdXNoX2JhY2soe3gsIHl9KTsKICAgIHYucHVzaF9iYWNrKHt4K2R4W2RdLCB5K2R5W2RdfSk7CiAgICAKICAgIHdoaWxlKGctLSkgewogICAgICAgIGF1dG8gbyA9IHYuYmFjaygpOwogICAgICAgIGZvcihpbnQgaSA9IHYuc2l6ZSgpLTI7IGkgPj0gMDsgaS0tKQogICAgICAgICAgICB2LnB1c2hfYmFjayh0dXJuKG8sIHZbaV0pKTsKICAgIH0KICAgIAogICAgZm9yKGF1dG8mIHAgOiB2KSB7CiAgICAgICAgY291dCA8PCBwLmZpcnN0IDw8ICIsIiA8PCBwLnNlY29uZCA8PCBlbmRsOwogICAgICAgIGlmKGlzVmFsaWQocC5maXJzdCwgcC5zZWNvbmQpKQogICAgICAgICAgICBtcFtwLnNlY29uZF1bcC5maXJzdF0gPSB0cnVlOwogICAgfQogICAgY291dCA8PCBlbmRsOwp9CgppbnQgY2hlY2soKSB7CiAgICBpbnQgcmVzdWx0ID0gMDsKICAgIGZvcihpbnQgeSA9IDA7IHkgPCAxMDA7IHkrKykgewogICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCAxMDA7IHgrKykKICAgICAgICAgICAgaWYobXBbeV1beF0gJiYgbXBbeSsxXVt4XSAmJiBtcFt5XVt4KzFdICYmIG1wW3krMV1beCsxXSkgewogICAgICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAgICAgICAgICAgICBjb3V0IDw8IHggPDwiLCI8PCB5IDw8IGVuZGw7CiAgICAgICAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkgewogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlKHQtLSkgewogICAgICAgIGludCB4LCB5LCBkLCBnOwogICAgICAgIGNpbiA+PiB4ID4+IHkgPj4gZCA+PiBnOwogICAgICAgIGZ1bmMoeCwgMTAwLXksIGQsIGcpOwogICAgfQogICAgY291dCA8PCBjaGVjaygpOwogICAgcmV0dXJuIDA7Cn0=
o4,97
p3,97
c-1,0
r4,96
3,97
4,97
4,96
o4,97
p4,98
c0,1
r3,97
o3,97
p4,97
c1,0
r3,98
o3,97
p4,98
c1,1
r2,98
o2,98
p3,98
c1,0
r2,99
o2,98
p3,97
c1,-1
r3,99
o2,98
p4,97
c2,-1
r3,100
o2,98
p4,98
c2,0
r2,100
4,98
4,97
3,97
3,98
2,98
2,99
3,99
3,100
2,100
o3,98
p4,98
c1,0
r3,99
4,98
3,98
3,99
3,97
2,98
2,99
3