// Run this and see... package twistedttt; public class T{public static void main(String[] args){ int[] t= { 7,56,448,73,146,292,273,84}; int i,r,c,q,y,l,z=0,m,k=0;String[]f={"---+---+---","\n", " ", " X", " O", " |", "","Player ", " make your move: two integers in range 1..3 representing [row column]","That space is taken", "Invalid input. Try entering two integers between 1 and 3.","X wins\n","O wins\n","No winner." +"Game is drawn\n"};boolean d;Exception e=new Exception(); String b="";java.util.Scanner x=new java.util . Scanner ( System.in ); m= t [7 ]+ ( t[ 0] +1 )/ 2 ;l =t [ 0] +t [1]+t[2] ; while( k ==0){b=f[ 6 ] ;for(q=1,y=4;q<=t[6];q*=2){if((l&q)==q){b+=f[2];}else if((z&q)==q){b+=f[3];}else b = b+f[ 4];if ( q<256 ){if ( q==y){b+= f[1] +f[0] + f[1]; y*=8; } else b+= f[5];} } System . out. println (b+f [1]) ; b=f[6 ];q=0 ; d= false; System .out . println (f[7] + (char) m+f[8]); try{ if( ( r=(x. nextInt ( )-1))<0||r>3){ throw e;}if ( (c=(x. nextInt ( )-1))< 0||c>3 ) { throw e;}q=(int)Math.pow(2,3*r+c);if((l&q)==0){System.out.println(f[9]);}else{l-=q;if ( m %2==0 )z+= q ;if(! d)for ( i=0;i<8;i++){ if( ((l& t [i]) ==0)&& ( (( z &t[i])== t [i])|( ( z& t[ i]) ==0)) ) {k=m; d=true; } }if (!d )if( l==0) { k = t[ 0]/2; d =true;}if(!d)m = m + ( 9*(2*(m%2)-1));}}catch(Exception j){q=1;System.out.println (f[10]);x.nextLine();} if(q==0)k=(9*(2*(m%2)-1));}if(k == 2*t[0]+t[3]+1){b=f[11];}else if(k==t[3]+t[0]-1 ){b=f[12];}else if(k==t[0]/2){b=f[13];}System.out.println(b);b=f[6];for(q=1,y=4;q <=256;q*=2){ if((l&q)==q){b+=f[2];}else if((z&q)==q){b+=f[3];}else{b+=f[4];}if(q< 256){if(q==y){b+=f[1]+f[0]+f[1];y*=8;}else b+=f[5];}}System.out.println(b+f[1]);}}