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