public void run ()
	{   int W=job.getPageDimension().width,H=job.getPageDimension().height;
	    int D=W*2/3/S,O=W/6;
	    if (D%2!=0) D++;
	    font=new Font("SansSerif",Font.BOLD,D/2);
		g.setFont(font);
	    fontmetrics=g.getFontMetrics(font);
		g.setColor(Color.black);
		int i,j;
		// Draw lines
		int y=O;
		int h=fontmetrics.getAscent()/2-1;
		for (i=0; i<S; i++)
		{	String s=""+(S-i);
			int w=fontmetrics.stringWidth(s)/2;
			g.drawString(s,O+S*D+D/2-w,y+D/2+h);
			y+=D;
		}
		int x=O;
		char a[]=new char[1];
        for (i=0; i<S; i++)
    	{	j=i;
    		if (j>7) j++;
    		a[0]=(char)('A'+j);
    		String s=new String(a);
    		int w=fontmetrics.stringWidth(s)/2;
    		g.drawString(s,x+D/2-w,O+S*D+D/2+h);
    		x+=D;
    	}
    	for (i=0; i<S; i++)
    	    for (j=0; j<S; j++)
    	    {   update1(g,O+D*i,O+D*j,i,j,D);
    	    }
    	g.dispose();
	    job.end();
	}