# include using namespace std; int f; struct point { double x; double y; }; vector fig[505]; point newpoint; double mx,my; stack s; double Const = 1.0; double sums[505]; double xans[505],yans[505]; double alphaans[505]; int type[505]; vector help; vector types[8]; vector p[2]; double PI = 3.14159265; double SUM,ANS; int otg1=-1,otg2=-1; double TL = 3.6; clock_t begin1; bool cmp(point i, point j) { double tx,ty,px,py; tx=i.x-mx; ty=i.y-my; px=j.x-mx; py=j.y-my; if(tx*py-ty*px>0)return true; if(tx*py-ty*px==0)return i.x>j.x; return false; //if(i.cp==j.cp)return i.x>f; int i,j,p; double u,v; int m,k,t; double sum; for(i=1;i<=f;i++) { cin>>p; for(j=1;j<=p;j++) { cin>>u>>v; newpoint.x=u; newpoint.y=v; fig[i].push_back(newpoint); } cin>>m; sum=0; for(j=1;j<=m;j++) { cin>>k; for(t=1;t<=k;t++) { cin>>p; fig[f+1].push_back(fig[i][p]); } sum+=Area(f+1); fig[f+1].clear(); } // for(j=0;jA.y){miny=A.y;minx=A.x;} else if(miny-A.y<=0.0000001&&minx>A.x){miny=A.y;minx=A.x;} p[fl].push_back(A); } //return {-minx,-miny}; } double grahamscan(int pos) { int i,j; int m=0; for(i=0;i=0){s.push(B);s.push(C);} else s.push(C); } fig[pos].clear(); while(!s.empty()) { fig[pos].push_back(s.top()); s.pop(); } double S2 = Area(pos); // double ans = S2 - Const*S1; //cout< p0,p1; bool pos,pos1; point C,D; int q; double area,ans; int k; for(i=0;iTL)return 0; A = fig[v1][i]; B = (fig[v1].size()==i+1 ? fig[v1][0] : fig[v1][i+1]); if(B.x-A.x!=0){ tgalpha = (A.y-B.y)/(B.x-A.x); alpharad = atan(tgalpha); }else { if(A.y>B.y) alpharad = PI/2; else alpharad = 3*PI/2; } rotate(v1,0,alpharad); // cout<D.y) betharad=PI/2; else betharad=3*PI/2; } rotate(v2,1,betharad); // cout<=2*PI)betharad-=2*PI; fig[f+1].clear(); for(q=0;q360.0)alphaans[v]-=360.0; return ; } void print() { /* int i; double ans = 0,k; int p = -1; for(i=1;i<=f;i++) { k = grahamscan(i); if(k0)br2++; types[type[i]].push_back(i); } if(br2==f){ int pos=0; for(i=0;i1) { xans[types[7][t7]]+=pos; xans[types[7][t7+1]]+=pos; yans[types[7][t7+1]]+=2; t7+=2; pos+=2; } while(types[4].size()-t4>1) { if(((types[2].size()-t2)>0)&&(((types[2].size()-t2)%2==1)||((types[2].size()-t2)*2>types[6].size()))) { xans[types[4][t4]]+=pos; yans[types[4][t4]]++; reverse(types[4][t4+1]); xans[types[4][t4+1]]+=pos; reverse(types[2][t2]); reverse(types[2][t2]); xans[types[2][t2]]+=(pos+1); yans[types[2][t2]]+=3; t2++; pos+=3; t4+=2; } else if((types[3].size()-t3)>0) { reverse(types[4][t4]); reverse(types[4][t4]); xans[types[4][t4]]+=(pos+1); yans[types[4][t4]]+=2; reverse(types[4][t4+1]); xans[types[4][t4+1]]+=pos; reverse(types[3][t3]); reverse(types[3][t3]); xans[types[3][t3]]+=pos; yans[types[3][t3]]++; pos+=3; t3++; t4+=2; } else break; } for(t6=0;t61);t6++) { reverse(types[2][t2]); xans[types[2][t2]]+=pos; reverse(types[6][t6]); xans[types[6][t6]]+=pos; yans[types[6][t6]]+=1; reverse(types[2][t2+1]); reverse(types[2][t2+1]); reverse(types[2][t2+1]); xans[types[2][t2+1]]+=pos; yans[types[2][t2+1]]+=2; pos+=3; t2+=2; } for(t5=0;t51);t5++) { reverse(types[3][t3]); reverse(types[3][t3]); reverse(types[3][t3]); xans[types[3][t3]]+=pos; reverse(types[5][t5]); xans[types[5][t5]]+=pos; yans[types[5][t5]]+=2; reverse(types[3][t3+1]); xans[types[3][t3+1]]+=pos; yans[types[3][t3+1]]+=3; pos+=3; t3+=2; } while(types[2].size()-t2>1) { xans[types[2][t2]]+=pos; reverse(types[2][t2+1]); reverse(types[2][t2+1]); xans[types[2][t2]]+=pos; yans[types[2][t2]]+=3; t2+=2; pos+=2; } while(types[3].size()-t3>1) { xans[types[3][t3]]+=pos; reverse(types[3][t3+1]); reverse(types[3][t3+1]); xans[types[3][t3+1]]+=pos; yans[types[3][t3+1]]+=1; pos+=2; t3+=2; } while(types[2].size()-t2>0&&types[3].size()-t3>0&&types[7].size()-t7>0) { xans[types[2][t2]]+=pos; xans[types[7][t7]]+=(pos+1); yans[types[7][t7]]++; xans[types[3][t3]]+=(pos+2); pos+=4; t7++; t2++; t3++; } while(types[2].size()-t2>0&&types[3].size()-t3>0) { yans[types[2][t2]]++; xans[types[2][t2]]+=pos; xans[types[3][t3]]+=(pos+1); pos+=3; } while(t50) {cout<<1<<" "<