#include <iostream>
using namespace std;
enum e_state
{
SAFETY = 0,
DANGER,
DEATH,
};
#define MAP_MAX 500
int _map[MAP_MAX + 1][MAP_MAX + 1] = {SAFETY, };
int num_danger, num_death;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, 1, -1};
struct Info
{
int x, y;
int lost_life;
Info(int x_, int y_, int lost_life_) : x(x_), y(y_), lost_life(lost_life_) {}
};
#include <queue>
int visit[MAP_MAX + 1][MAP_MAX + 1];
#define TEST_MAX 10
void printMap()
{
cout << "==map==\n";
for (int y = 0; y <= TEST_MAX; ++y)
{
for (int x = 0; x <= TEST_MAX; ++x)
{
cout << _map[y][x];
}
cout << '\n';
}
cout << "==visit==\n";
for (int y = 0; y <= TEST_MAX; ++y)
{
for (int x = 0; x <= TEST_MAX; ++x)
{
cout << visit[y][x];
}
cout << '\n';
}
}
void output()
{
long long res = -1;
queue<Info> q;
visit[0][0] = 1;
Info start(0, 0, 0);
q.push(start);
while (!q.empty())
{
Info tmp = q.front();
q.pop();
if (tmp.x == MAP_MAX && tmp.y == MAP_MAX)
{
if (res == -1 || tmp.lost_life < res)
res = tmp.lost_life;
continue;
}
for (int i = 0; i < 4; i++)
{
int nx = tmp.x + dx[i];
int ny = tmp.y + dy[i];
if (nx >= 0 && ny >= 0 && nx <= MAP_MAX && ny <= MAP_MAX && visit[ny][nx] == 0 && _map[ny][nx] != DEATH)
{
visit[ny][nx] = 1;
int lost_life = tmp.lost_life;
if (_map[ny][nx] == DANGER)
lost_life += 1;
q.push(Info(nx, ny, lost_life));
}
}
}
cout << res;
}
void setMap(int x_start, int y_start, int x_end, int y_end, e_state state)
{
for (int y = y_start; y <= y_end; ++y)
{
for (int x = x_start; x <= x_end; ++x)
{
_map[y][x] = state;
}
}
}
void input()
{
cin >> num_danger;
for (int i = 0; i < num_danger; ++i)
{
int x1, y1, x2, y2;
// cin >> x1 >> y1 >> x2 >> y2;
cin >> y1 >> x1 >> y2 >> x2;
setMap(min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2), DANGER);
}
cin >> num_death;
for (int i = 0; i < num_death; ++i)
{
int x1, y1, x2, y2;
// cin >> x1 >> y1 >> x2 >> y2;
cin >> y1 >> x1 >> y2 >> x2;
setMap(min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2), DEATH);
}
}
int main()
{
input();
output();
}
// printMap();
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmVudW0gZV9zdGF0ZQp7CiAgICBTQUZFVFkgPSAwLAogICAgREFOR0VSLAogICAgREVBVEgsCn07CgojZGVmaW5lIE1BUF9NQVggNTAwCgppbnQgX21hcFtNQVBfTUFYICsgMV1bTUFQX01BWCArIDFdID0ge1NBRkVUWSwgfTsKaW50IG51bV9kYW5nZXIsIG51bV9kZWF0aDsKaW50IGR4WzRdID0gey0xLCAxLCAwLCAwfTsKaW50IGR5WzRdID0gezAsIDAsIDEsIC0xfTsKCnN0cnVjdCBJbmZvCnsKICAgIGludCB4LCB5OwogICAgaW50IGxvc3RfbGlmZTsKCiAgICBJbmZvKGludCB4XywgaW50IHlfLCBpbnQgbG9zdF9saWZlXykgOiB4KHhfKSwgeSh5XyksIGxvc3RfbGlmZShsb3N0X2xpZmVfKSB7fQp9OwoKI2luY2x1ZGUgPHF1ZXVlPgppbnQgdmlzaXRbTUFQX01BWCArIDFdW01BUF9NQVggKyAxXTsKCiNkZWZpbmUgVEVTVF9NQVggMTAKdm9pZCBwcmludE1hcCgpCnsKICAgIGNvdXQgPDwgIj09bWFwPT1cbiI7CiAgICBmb3IgKGludCB5ID0gMDsgeSA8PSBURVNUX01BWDsgKyt5KQogICAgewogICAgICAgIGZvciAoaW50IHggPSAwOyB4IDw9IFRFU1RfTUFYOyArK3gpCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8IF9tYXBbeV1beF07CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgJ1xuJzsKICAgIH0KCiAgICBjb3V0IDw8ICI9PXZpc2l0PT1cbiI7CiAgICBmb3IgKGludCB5ID0gMDsgeSA8PSBURVNUX01BWDsgKyt5KQogICAgewogICAgICAgIGZvciAoaW50IHggPSAwOyB4IDw9IFRFU1RfTUFYOyArK3gpCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8IHZpc2l0W3ldW3hdOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8ICdcbic7CiAgICB9Cn0KCnZvaWQgb3V0cHV0KCkKewogICAgbG9uZyBsb25nIHJlcyA9IC0xOwogICAgcXVldWU8SW5mbz4gcTsKCiAgICB2aXNpdFswXVswXSA9IDE7CiAgICBJbmZvIHN0YXJ0KDAsIDAsIDApOwogICAgcS5wdXNoKHN0YXJ0KTsKCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkKICAgIHsKICAgICAgICBJbmZvIHRtcCA9IHEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwoKICAgICAgICBpZiAodG1wLnggPT0gTUFQX01BWCAmJiB0bXAueSA9PSBNQVBfTUFYKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHJlcyA9PSAtMSB8fCB0bXAubG9zdF9saWZlIDwgcmVzKQogICAgICAgICAgICAgICAgcmVzID0gdG1wLmxvc3RfbGlmZTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGludCBueCA9IHRtcC54ICsgZHhbaV07CiAgICAgICAgICAgIGludCBueSA9IHRtcC55ICsgZHlbaV07CiAgICAgICAgICAgIGlmIChueCA+PSAwICYmIG55ID49IDAgJiYgbnggPD0gTUFQX01BWCAmJiBueSA8PSBNQVBfTUFYICYmIHZpc2l0W255XVtueF0gPT0gMCAmJiBfbWFwW255XVtueF0gIT0gREVBVEgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZpc2l0W255XVtueF0gPSAxOwogICAgICAgICAgICAgICAgaW50IGxvc3RfbGlmZSA9IHRtcC5sb3N0X2xpZmU7CiAgICAgICAgICAgICAgICBpZiAoX21hcFtueV1bbnhdID09IERBTkdFUikKICAgICAgICAgICAgICAgICAgICBsb3N0X2xpZmUgKz0gMTsKICAgICAgICAgICAgICAgIHEucHVzaChJbmZvKG54LCBueSwgbG9zdF9saWZlKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCByZXM7Cn0KCnZvaWQgc2V0TWFwKGludCB4X3N0YXJ0LCBpbnQgeV9zdGFydCwgaW50IHhfZW5kLCBpbnQgeV9lbmQsIGVfc3RhdGUgc3RhdGUpCnsKICAgIGZvciAoaW50IHkgPSB5X3N0YXJ0OyB5IDw9IHlfZW5kOyArK3kpCiAgICB7CiAgICAgICAgZm9yIChpbnQgeCA9IHhfc3RhcnQ7IHggPD0geF9lbmQ7ICsreCkKICAgICAgICB7CiAgICAgICAgICAgIF9tYXBbeV1beF0gPSBzdGF0ZTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgaW5wdXQoKQp7CiAgICBjaW4gPj4gbnVtX2RhbmdlcjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2RhbmdlcjsgKytpKQogICAgewogICAgICAgIGludCB4MSwgeTEsIHgyLCB5MjsKICAgICAgICAvLyBjaW4gPj4geDEgPj4geTEgPj4geDIgPj4geTI7CiAgICAgICAgY2luID4+IHkxID4+IHgxID4+IHkyID4+IHgyOwogICAgICAgIHNldE1hcChtaW4oeDEsIHgyKSwgbWluKHkxLCB5MiksIG1heCh4MSwgeDIpLCBtYXgoeTEsIHkyKSwgREFOR0VSKTsKICAgIH0KICAgIGNpbiA+PiBudW1fZGVhdGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9kZWF0aDsgKytpKQogICAgewogICAgICAgIGludCB4MSwgeTEsIHgyLCB5MjsKICAgICAgICAvLyBjaW4gPj4geDEgPj4geTEgPj4geDIgPj4geTI7CiAgICAgICAgY2luID4+IHkxID4+IHgxID4+IHkyID4+IHgyOwogICAgICAgIHNldE1hcChtaW4oeDEsIHgyKSwgbWluKHkxLCB5MiksIG1heCh4MSwgeDIpLCBtYXgoeTEsIHkyKSwgREVBVEgpOwogICAgfQp9CgoKaW50IG1haW4oKQp7CiAgICBpbnB1dCgpOwogICAgb3V0cHV0KCk7Cn0KCiAgICAvLyBwcmludE1hcCgpOw==