#include <stdio.h>
#include <math.h>

main(int argc,char **argv)
{
	FILE *fp,*fpi;
	int  width, height, i,j,x,y;
	double r,d,dx,dy;
	double r2;
	char buf[80];
	char *img,*p;

	fpi = fopen(*++argv,"rb");
	fgets(buf,50,fpi);
	fgets(buf,50,fpi);
	sscanf(buf,"%d %d",&width,&height);
	fgets(buf,50,fpi);
	img = (char *)malloc(width*height);
	p = img;
	for(j=0;j<height;j++) {
		for(i=0;i<width;i++) {
			*p=fgetc(fpi);
			p++;
		}
	}

	fp = fopen("out.pgm","wb");
	fprintf(fp,"P5\n%d %d\n255\n",width,height);
	for(j=0;j<height;j++) {
		for(i=0;i<width;i++) {
			r2 = (double)((j-height/2)*(j-height/2)+(i-width/2)*(i-width/2));
			r2 = (r2>0.0)?r2:0.0000000000001;
			r = sqrt(r2);
			d = 0.5 * r - 0.0001 * r * r * r;
/* printf("%f %f\n",r,d); */
			dx = d*(i-width/2)/r;
			dy = d*(j-height/2)/r;
			x = i - (int)dx;
			if (x < 0) x = 0;
			if (x >= width) x = width -1;
			y = j - (int)dy;
			if (y < 0) y = 0;
			if (y >= height) y = height -1;
/* printf("%d %d %d %d\n",i,j,x,y); */
 			fputc(*(img+y*width+x),fp);
		}
	}
	fclose(fp);
}

			