#include #include #include using namespace std; const int maxn = 550, inf = 1<<28; typedef 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; Point h[maxn], s[maxn]; int n, m, ans, G[maxn][maxn]; bool check(Point x, Point y, Point z){ if((x.xz.x && y.x>z.x) || (x.y>z.y && y.y>z.y))return 1; return 0; } int main(){ while(scanf("%d", &n)!=EOF){ memset(G, 62, sizeof(G)); for(int i = 1; i <= n; i++) scanf("%d%d", &h[i].x, &h[i].y); scanf("%d", &m); for(int i = 1; i <= m; i++) scanf("%d%d", &s[i].x, &s[i].y); for(int i = 1; i <= m; i++){ for(int j = 1; j <= m; j++){ int ok = 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 && check(s[i], s[j], h[k])){ ok = 0; break; } } if(ok){ G[i][j] = 1; } } } 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 > m)printf("ToT\n"); else printf("%d\n", m-ans); } return 0; }