#include #define ll long long #define inf 0x3f3f3f3f using namespace std; const int maxn=2e5+5; 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,mp[505][505]; int 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(){ int i,j,k,flag; while(~scanf("%d",&n)){ memset(mp,62,sizeof(mp)); 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++){ 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&&check(s[i],s[j],h[k])){ flag=0;break; } } if(flag) mp[i][j]=1; } } ans=inf; for(int k=1;k<=m;k++){ for(int i=1;i<=m;i++){ if(mp[i][k]==inf) continue; for(int j=1;j<=m;j++){ mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]); } } } for(int i=1;i<=m;i++) ans=min(ans,mp[i][i]); if(ans>m) printf("ToT\n"); else printf("%d\n",m-ans); } return 0; }