#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include const double PI = acos(-1.0); const int INF = 0x3f3f3f3f; const int NINF = -INF - 1; const int maxn = 5e2 + 10; const double eps = 1e-9; typedef long long ll; #define MOD 10007 using namespace std; int n, m; int dis[maxn][maxn], g[maxn][maxn]; struct node { int x, y; }a[maxn], b[maxn]; inline double multi(node p0, node p1, node p2) { return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y); } int main() { while(~scanf("%d", &n)){ for(int i = 1; i <= n; ++i){ scanf("%d %d", &a[i].x, &a[i].y); } scanf("%d", &m); for(int i = 1; i <= m; ++i){ scanf("%d %d", &b[i].x, &b[i].y); } for(int i = 1; i <= m; ++i){ for(int j = 1; j <= m; ++j) g[i][j] = INF; } for(int i = 1; i <= m; ++i){ for(int j = i + 1; j <= m; ++j){ int flag = 0, vis = 0; for(int k = 1; k <= n; ++k){ int rec = multi(b[i], b[j], a[k]); if(rec == 0) vis++; else if(rec > 0) flag += 1; else flag -= 1; } if(vis == n) g[i][j] = g[j][i] = 1; else{ if(flag == n - vis) g[i][j] = 1; else if(flag == vis - n) g[j][i] = 1; } } } for(int i = 1; i <= m; ++i){ for(int j = 1; j <= m; ++j) dis[i][j] = g[i][j]; } int ans = INF; for(int k = 1; k <= m; ++k) { for(int i = 1; i <= m; ++i) { if(g[i][k] == INF) continue; for(int j = 1; j <= m; ++j) g[i][j] = min(g[i][j], g[i][k] + g[k][j]); } } for(int i = 1; i <= m; ++i) ans = min(ans, g[i][i]); if(ans == INF) printf("ToT\n"); else printf("%d\n", m - ans); } return 0; }