#include #include #include using namespace std; #define inf 1044266558 struct Point { int x, y; Point operator - (const Point &b)const { Point c; c.x = x - b.x; c.y = y - b.y; return c; } double operator * (const Point &b)const { return x * b.y - y * b.x; } }; Point h[505], s[505]; int n, m, ans,road[505][505]; bool Jud(Point x, Point y, Point z) { if ((x.x < z.x&&y.x < z.x) || (x.y < z.y&&y.y < z.y) || (x.x > z.x&&y.x > z.x) || (x.y > z.y&&y.y > z.y)) { return 1; } return 0; } int main() { int flag; while (!(cin >> n).eof()) { memset(road, 62, sizeof(road)); for (int i = 1; i <= n; i++) { cin >> h[i].x >> h[i].y;//房子 } cin >> m; for (int i = 1; i <= m; i++) { cin >> s[i].x >> s[i].y;//士兵 } for (int i = 1; i <= m; i++) { for (int j = 1; j <= m; j++) { flag = 1; for (int k = 1; k <= n; k++) { if ((s[i] - s[j])*(s[i] - h[k]) < 0 || (s[i] - s[j])*(s[i] - h[k]) == 0 && Jud(s[i], s[j], h[k])) { flag = 0; break; } } if (flag) road[i][j] = 1; } } ans = inf; for (int k = 1; k <= m; k++) { for (int i = 1; i <= m; i++) { if (road[i][k] == inf) continue; for (int j = 1; j <= m; j++) road[i][j] = min(road[i][j], road[i][k] + road[k][j]); } } for (int i = 1; i <= m; i++) ans = min(ans, road[i][i]); if (ans > m)cout << "ToT" << endl; else cout << m - ans << endl; } return 0; }