#include #define cs(n) scanf("%d", &n) #define F(i, j, k) for(int i = j; i <= k; ++i) #define R(i, j, k) for(int i = j; i >= k; --i) using namespace std; using ll = long long; const int MAXN = 1004; const int INF = 0x3f3f3f3f; struct Point { int x, y; } p1[MAXN], p2[MAXN]; int d[MAXN][MAXN]; bool check(Point& x, Point& y, Point& z) { int t1 = x.x - z.x; int t2 = y.y - z.y; int t3 = y.x - z.x; int t4 = x.y - z.y; ll ans = (ll)t1 * t2 - (ll)t3 * t4; if(ans < 0) return true; else if(ans == 0) { return z.x >= min(x.x, y.x) && z.x <= max(x.x, y.x) && z.y >= min(x.y, y.y) && z.y <= max(x.y, y.y); } return false; } int main() { int n, m; while(~cs(n)) { F(i, 1, n) { cs(p1[i].x); cs(p1[i].y); } cs(m); F(i, 1, m) { cs(p2[i].x); cs(p2[i].y); } F(i, 1, m) F(j, 1, m) d[i][j] = INF; F(i, 1, m) F(j, 1, m) { bool f = 1; F(k, 1, n) { if(!check(p2[i], p2[j], p1[k])) { f = 0; break; } } if(f) d[i][j] = 1; } F(k, 1, m) F(i, 1, m) F(j, 1, m) d[i][j] = min(d[i][j], d[i][k] + d[k][j]); int ans = INF; F(i, 1, m) ans = min(ans, d[i][i]); if(ans > m) puts("ToT"); else printf("%d\n", m - ans); } return 0; }