#include #include #define max_n 500 #define max_m 500 #define inf 32767 int g[max_n][max_n],dist[max_n][max_n]; struct point { int x, y; } house[max_n], defenders[max_m]; int cross(point a, point b, point p) { return (b.x - a.x) * (p.y - a.y) - (p.x - a.x) * (b.y - a.y); } int m, n; bool judge(point a, point b) { point temp; for (int i = 0; i < n; i++) { if(cross(a,b,house[i])>0) return false; if(cross(a,b,house[i])==0) { temp = house[i]; if((temp.x>a.x&&temp.x>b.x) || (temp.x g[i][k]+g[k][j]+dist[j][i]) mincircle = g[i][k] + g[k][j] + dist[j][i]; } } for (int i = 0; i < n; i++) { if (dist[i][k]==inf) continue; for(int j=0;j dist[i][k]+dist[k][j]) dist[i][j] = dist[i][k] + dist[k][j]; } } } return mincircle; } int main() { int i, j; while (scanf("%d",&n)!=EOF) { for (i = 0; i < n;i ++) { scanf("%d%d", &house[i].x, &house[i].y); } scanf("%d", &m); for ( i = 0; i < m; i++) { scanf("%d%d", &defenders[i].x, &defenders[i].y); } for (i = 0; i < m; i++) for (j = 0; j < m; j++) { g[i][j] = dist[i][j] = inf; } for (i = 0; i < m; i++) for (j = 0; j < m; j++) { if(judge(defenders[i],defenders[j])) g[i][j] = dist[i][j] = 1; } int r = m - floyd(m); if(r>=0) printf("%d\n", r); else { printf("ToT\n"); } } return 0; }