#include #include #include #define A B(p=t+Z*b+y*S;l=w*h;for(u=j=0;l&&jc[j\ ++]=(p[w*b+h*S]-p[w*b]-p[h*S]+*p+l/2)/l,-),u+=z*z; X->d=u;} int main(int c,char**V){while(c==4){struct{uint16_t x,y,w,h; #define B(e,f) {int x,Z=X->x,y=X->y,w=X->w,h=X->h;e;for(;h--\ ;y++)for(x=Z;xc[j] #define H(W,H,w,h,B,i) for(B=z=i=0;++zB?B=u,i=z:0)for(u=j\ =0;p=t+x*b+y*S+j,jc[j]*h,L=p[w*\ W+h*H]-p[w*W]-K-Q*(w-z),K-=p[h*H]-*p+Q*z,u+=L<0?-L:L,u+=K<0?-K:K; #define W(r,X) if(!(F=fopen(*++V,#r)))break;X(d,s,h,F); fclose(F); #define G(n,x,y){for(k=0,n=-x;!k;k=z-' '&&z-'\n'&&z-'\r'&&z-'\t'&\ &z-EOF?z<'0'||z>'9'||(n=(n<0?0:n*10)+z-'0')>>15?n=-1:0:n>=0||z>>8\ )for(;z=fgetc(F),k++?z-'\n'&&z-EOF:z=='#';);if(x?y:n-3&&n-6)break; uint8_t c[4];int64_t d;}*P,*N,*X,o;void*O,*F;int64_t*p,e,f,u,K,L,* t,Q,U=1;uint8_t*d;intptr_t n=atoi(*++V),w,h,s,b=3,S,i=0,j,x=0,y,v, q,l,k,z;W(rb,if(fgetc(F)=='P')G(i,0,0)}G(w,1,w<1)}G(h,1,h<1)}G(y,1 ,y-255)}L=n=n<1?1:n>w*h?w*h:n;K=S=(s=w*b)+b;K=sizeof(*X)*L+(u=K*h+ K)*9;if(K-(L=(size_t)K)||!(t=malloc(K)))break;X=P=O=t+u;d=O=P+n;if (i<4)for(;x>=8))}else i=h-fread)if(i)break ;;for(X->x=X->y=j=0;jw=w;X->h=h;A for(;N=X=P,U&& ++id>U?(N=X)->d:U; o=*N;v=o.w;q=o.h; x=o.x;y=o.y;H(b,S,v,q,e,k)H(S,b,q,v,f,l)eh=l,o.h-=l:(o. x+=N->w=k,o.w-=k);*X=o;A X=N;A}for(;i--;X++)B(,=);}W(wb,fprintf(F, "P6\n%i %i\n255\n",c=w,(int)h);fwrite)free(t);return 0;}return 1;}