#include #include #include using namespace std; const int N = 510,M = 100010; struct Node { int x,y; Node operator-(const Node& B)const { Node c; c.x=x-B.x; c.y=y-B.y; return c; } double operator*(const Node& B)const { return x*B.y-y*B.x; } }a[N],b[N]; int f[N][N]; inline bool judge(Node A,Node B,Node C) { int xmaxt=max(A.x,B.x),xmint=min(A.x,B.x); int ymaxt=max(A.y,B.y),ymint=min(A.y,B.y); if(C.x>=xmint&&C.x<=xmaxt&&C.y>=ymint&&C.y<=ymaxt) return 0; return 1; } int main() { int n,m; while(scanf("%d", &n)!=EOF) { memset(f,0x3f,sizeof f); for(int i=1;i<=n;i++) scanf("%d %d", &b[i].x, &b[i].y); scanf("%d", &m); for(int i=1;i<=m;i++) scanf("%d %d", &a[i].x, &a[i].y); for (int i = 1; i <= m; i ++ ) { for (int j = 1; j <= m; j ++ ) { bool ok=true; for(int k=1;k<=n;k++) { //if((g2[j]-g2[i])*(g1[k]-g2[i])<0||((g2[j]-g2[i])*(g1[k]-g2[i])==0&&judge(g2[i],g2[j],g1[k]))) if((a[j]-a[i])*(b[k]-a[i])<0||((a[j]-a[i])*(b[k]-a[i])==0&&judge(a[i],a[j],b[k]))) { ok=false; break; } } if(ok)f[i][j]=1; } } for(int k=1;k<=m;k++) { for (int i = 1; i <= m; i ++ ) { if(f[i][k]==0x3f3f3f3f)continue; for (int j = 1; j <= m; j ++ ) f[i][j]=min(f[i][k]+f[k][j],f[i][j]); } } int ans=0x3f3f3f3f; for(int i=1;i<=m;i++)ans=min(ans,f[i][i]); if(ans>m)puts("ToT"); else printf("%d\n",m-ans); } return 0; }