#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h> // isprint()
#include <error.h>
#include <errno.h>

#ifndef TRUE
#define TRUE (0==0)
#define FALSE (0!=0)
#endif

#define UP 0
#define LEFT 0
#define DOWN 1
#define RIGHT 1

#define NUM_GAMES (42U+75U)
const char *puzzle[NUM_GAMES] = {
// new 75:

  "..JJFF"
  "AAG.ID"
  "XXG.ID"
  "B.HHHE"
  "B.KKKE"
  "CCC..E",

  "EEC..."
  "IHCAAA"
  "IHXXBK"
  "GG.FBK"
  "...FD."
  ".JJ.D.",

  "JBBKKA"
  "J.HHHA"
  "XXFE.A"
  "..FECC"
  ".GGGI."
  ".DDDI.",

  ".IDDD."
  ".I.AAE"
  "XXJBHE"
  "C.JBH."
  "CF.B.."
  "CFGGKK",

  "JJ..F."
  "IHHHFC"
  "I.EXXC"
  "BBE..C"
  ".ADD.."
  ".AKKGG",

  "G.EEKD"
  "G.I.KD"
  "..IXXJ"
  "BBBF.J"
  "..AFCC"
  "HHAF..",

  "..CCEE"
  "IILBJJ"
  "XXLB.."
  "KHHB.."
  "KF.DD."
  "KFAAGG",

  "J.IIC."
  "JHHHCG"
  "..EXXG"
  "BBEA.G"
  "...AFF"
  "DDDA..",

  "FDDD.J"
  "F.BEEJ"
  "XXBHIL"
  ".CCHIL"
  "...AKK"
  ".GGA..",

  "H....."
  "H.FBJ."
  "XXFBJ."
  ".A.BDD"
  "GA.IIC"
  "GAEE.C",

  "..AFFF"
  "..AHD."
  "XXEHDG"
  ".BEKKG"
  "JBII.G"
  "JLLCC.",

  "..DGGG"
  "CCD..H"
  "LFXXEH"
  "LFIIEH"
  "..ABJJ"
  "KKAB..",

  "H....."
  "H.FBJ."
  "XXFBJ."
  ".A.BDD"
  "GA.IIC"
  "GAEE.C",

  "..AFFF"
  "..AHD."
  "XXEHDG"
  ".BEKKG"
  "JBII.G"
  "JLLCC.",

  "..DGGG"
  "CCD..H"
  "LFXXEH"
  "LFIIEH"
  "..ABJJ"
  "KKAB..",

  "....II"
  "BBAAAK"
  "XXFGEK"
  ".CFGE."
  "JCF..."
  "JDDHHH",

  "..C.GG"
  "..C..E"
  "XXD..E"
  "..DIIF"
  "HHHB.F"
  "AA.B..",

  ".DJJKF"
  ".DCHKF"
  "XXCH.F"
  "..CEBB"
  "IGGE.."
  "I.AAA.",

  ".DGG.."
  ".DHAA."
  "XXHIBC"
  "EEEIBC"
  "K.FFF."
  "K..JJ.",

  "GIKKJF"
  "GI..JF"
  "G.AXXF"
  "DDAB.."
  "H.EB.."
  "H.EBCC",

  "..IIKB"
  "GCCCKB"
  "G.XXLF"
  "JJDALF"
  "..DAHH"
  "EEEA..",

  "..C.EE"
  "G.C.HH"
  "GXXIBJ"
  "FA.IBJ"
  "FA.ID."
  "F...D.",

  "....II"
  "..BAA."
  "XXBF.."
  "J.BFCC"
  "JEEFHD"
  "KKGGHD",

  ".FFFK."
  "JJ.EK."
  "XX.EBH"
  "ALL.BH"
  "A.DCGG"
  "IIDC..",

  "AII..."
  "AGGG.K"
  "XXC..K"
  "HFC.EE"
  "HFJ.DD"
  "H.JBB.",

  "JCCCFF"
  "J..GBB"
  "XXDG.E"
  "KLDAAE"
  "KLHHHE"
  "....II",

  "IFFKKE"
  "I.AAAE"
  "XXHD.E"
  "..HDBB"
  ".GGGC."
  "..JJC.",

  "H.IIB."
  "H.KKB."
  "GGXXDJ"
  "FC..DJ"
  "FCLEDJ"
  ".CLEAA",

  ".HKKBE"
  "GH.FBE"
  "GXXFBJ"
  "DLLF.J"
  "D.ACCC"
  "..A.II",

  "HJJDCC"
  "HGGD.."
  "XXBE.."
  "..BEAA"
  "..BKKF"
  ".II..F",

  "..BGG."
  "..BEE."
  "XXBA.."
  "FDDA.."
  "F..A.."
  "F..CC.",

  "..ACBB"
  "..ACK."
  "XXACKE"
  ".G...E"
  "JGDDFI"
  "J.HHFI",

  "...BKK"
  "..HBEE"
  "XXHI.F"
  "GG.I.F"
  "LDDDJC"
  "L.AAJC",

  "IJJF.."
  "IKKF.."
  "XXCF.."
  ".BCAA."
  "HBEGG."
  "HBEDD.",

  "FFB.J."
  "H.BCJ."
  "HXXC.."
  ".I.C.E"
  ".IDAAE"
  "..DGGE",

  "...FCC"
  "..BFK."
  "XXBHKG"
  "JJ.HEG"
  "IAAAED"
  "ILLL.D",

  "F.J..."
  "F.JIDH"
  "XXBIDH"
  ".CB.AA"
  "ECKK.."
  "ECGG..",

  "AIDDHJ"
  "AIBEHJ"
  "XXBE.."
  "..F..."
  "..FCGG"
  "..FC..",

  "I.KKDD"
  "I.AAAL"
  "XXEB.L"
  "..EBHH"
  ".GGGFC"
  "..JJFC",

  "L.GGGE"
  "L.BBBE"
  "XXFHAI"
  "JCFHAI"
  "JC.D.."
  ".C.DKK",

  "I.GGGC"
  "I....C"
  "XXEFLJ"
  "HHEFLJ"
  "D.EBBB"
  "DKKAAA",

  "DDDBJE"
  "LHHBJE"
  "L.XXJE"
  "CCK..."
  ".GKII."
  ".GAAFF",

  "FDDDKK"
  "F.AAJJ"
  "XXBGEI"
  "CCBGEI"
  ".H.LE."
  ".H.L..",

  "FKKIII"
  "F.JDEE"
  "XXJDBH"
  "..AABH"
  ".CCCBH"
  ".GG...",

  "JFFFBK"
  "J.E.BK"
  "XXE..."
  "..GADD"
  "IIGA.C"
  "HHHA.C",

  ".AA.D."
  "HG..D."
  "HGXXFI"
  "H..CFI"
  "BBBCF."
  "...CEE",

  "CCJJJH"
  "..KK.H"
  "XX..EL"
  "FAAAEL"
  "F.BIGG"
  "DDBI..",

  "..ADDD"
  "..ALLK"
  "XXAFMK"
  "HIIFMG"
  "HECCCG"
  ".EBBJJ",

  "..D.EE"
  "C.DHHH"
  "CXXJ.."
  "CB.J.A"
  "KB.FFA"
  "KBIIGG",

  "A..IKK"
  "AD.I.."
  "ADEXXJ"
  ".DE.CJ"
  ".FFFCG"
  "HHBBCG",

  ".LCCII"
  ".LEEEM"
  "XXFJ.M"
  "..FJDD"
  "G.KKHB"
  "GAAAHB",

  "BCJJJ."
  "BCIII."
  "XXFM.."
  "L.FMEE"
  "LGGDD."
  "KKAAHH",

  "IIHHGD"
  "EEE.GD"
  ".JKXXD"
  "FJKA.."
  "FBBA.."
  "F..ACC",

  "KK.CE."
  "BBBCEJ"
  "XX.CAJ"
  "H.DDA."
  "H.IGGL"
  "FFI..L",

  ".JJHHH"
  "EAAAGG"
  "EXX.FK"
  ".BB.FK"
  ".D.III"
  ".D.CCC",

  ".BFFAD"
  "GB.IAD"
  "GXXI.D"
  "J.CEEE"
  "J.C..."
  "..C.HH",

  "FFH.AA"
  "JJH.ID"
  "CXX.ID"
  "CBBBID"
  "C..LEE"
  "KK.LGG",

  "F.BBB."
  "F.A..."
  "XXA..."
  "..AE.."
  "DDDE.."
  "CCC...",

  "..HIII"
  "DDH..."
  "EXXB.."
  "E..BFF"
  "JJKKKC"
  "AAAGGC",

  ".IJJB."
  ".IEEB."
  "KXXFB."
  "K.HFCC"
  "L.HDDG"
  "L.AAAG",

  "F.IIKK"
  "F.JJGG"
  "AAAXXH"
  "..BBBH"
  ".....E"
  "CC.DDE",

  ".KJJEE"
  ".KDAAA"
  "XXD..G"
  "..DLBG"
  "FCCLB."
  "FIIHH.",

  "IIFB.."
  "..FB.."
  "AXXB.."
  "A.DDD."
  "ACCCEG"
  "JJHHEG",

  "..FBBB"
  "EEF.C."
  ".DXXC."
  ".DAAA."
  ".D...."
  "......",

  "..C.EE"
  "DDC.BK"
  "IXXABK"
  "ILLAHG"
  "IF.AHG"
  ".F.JJJ",

  "..FGGG"
  "DDFA.."
  "KXXAE."
  "KCCAE."
  "..BJJH"
  "IIB..H",

  "JIICCC"
  "JAAB.K"
  "XX.BHK"
  "EEEBHG"
  "...DDG"
  "..FF.G",

  "LG.DCC"
  "LG.D.B"
  "JG.XXB"
  "JKK.IE"
  "AAH.IE"
  "..HFF.",

  "GGG.CI"
  "KK..CI"
  "XX..EH"
  "JDFFEH"
  "JDBAA."
  "LLB...",

  "BEEK.."
  "B.FKHH"
  "XXFG.J"
  "CCCG.J"
  "DIA..."
  "DIA...",

  ".KJJFI"
  ".KB.FI"
  "XXB..I"
  "CCB..."
  "EGGH.."
  "EDDHAA",

  ".IICG."
  "FFFCGE"
  "XX.CHE"
  "B.JJH."
  "B.DAAL"
  "KKD..L",

  "IBBBHH"
  "I.GDDD"
  "XXGE.."
  "..GE.."
  ".AFFF."
  ".ACCJJ",

  "FFAB.."
  "C.AB.."
  "CXXB.."
  "CGIIHH"
  ".GEEJK"
  ".DD.JK",

  "EEEDA."
  "HHHDA."
  ".XXJA."
  "G..JCC"
  "G.BFFI"
  "..B..I",

// original 42:

  "II.B.."
  "JHHB.E"
  "JAAXXE"
  "D.F..E"
  "D.F.CC"
  "D.FGGG",
  
  "EDDD.."
  "E.KICC"
  "XXKIAG"
  ".JFFAG"
  ".J.BB."
  ".J..HH",
  
  ".IIIGG"
  "..B..."
  "XXB..."
  "HEEJJK"
  "HFFADK"
  "CC.ADK",
  
  "..A.JJ"
  "DDABBI"
  "XXAFGI"
  ".CCFGE"
  ".HH.GE"
  ".....E",
  
  "HIIDDD"
  "H.FEJJ"
  "XXFEC."
  "....C."
  ".AAACG"
  "..BBBG",
  
  "...KBB"
  "I.AK.D"
  "I.AXXD"
  "GCCCHL"
  "GFEEHL"
  ".FJJH.",
  
  "..FAAA"
  "..FBEE"
  "XXFB.."
  "CDDD.H"
  "C....H"
  "CGG...",
  
  ".HGGAK"
  ".HF.AK"
  "XXFE.."
  "DDBEJJ"
  "C.BE.."
  "C.II..",
  
  "IIE..."
  "J.EFFL"
  "JXXAGL"
  "...AGD"
  "HHHABD"
  "CCKKB.",
  
  ".AADD."
  "EEEBF."
  "JXXBFI"
  "JHCKKI"
  "GHC..."
  "G.....",
  
  "...BH."
  "I..BH."
  "IXXBJC"
  "G.A.JC"
  "GEADDC"
  "GEFFF.",
  
  ".AABI."
  "HHHBI."
  "XX.BFD"
  "G.KKFD"
  "G.ECCL"
  "JJE..L",
  
  "EFFFJJ"
  "E.HC.D"
  "XXHC.D"
  ".GAA.."
  ".GKK.."
  "IIBBB.",
  
  ".JAAAE"
  ".JC..E"
  "XXC..."
  "H.CGGG"
  "HBBDFI"
  "KK.DFI",
  
  ".KJJAA"
  ".K.BD."
  "XX.BDF"
  "I.CCCF"
  "I.HGGF"
  "EEH...",
  
  ".G...."
  ".G..FF"
  "XXBIAE"
  "C.BIAE"
  "CDB..."
  "CDHH..",
  
  "AIJJJ."
  "AID..."
  "XXDBF."
  "GGDBFL"
  "E..KKL"
  "E.HHCC",
  
  "AAJ..C"
  "I.JBBC"
  "I.XXKC"
  "HH.FK."
  "DDDFE."
  "GGGFE.",
  
  ".DGG.."
  ".D.AFF"
  "XXHA.."
  "..HA.."
  "IEEECC"
  "I.BB..",
  
  "A.EHHH"
  "A.EI.."
  "AXXI.."
  ".JCCFD"
  ".JB.FD"
  ".JBGGD",
  
  "JGGEII"
  "J..E.F"
  "XXA..F"
  "..ACCF"
  "..AHDD"
  "BBBH..",
  
  ".JJ..."
  ".FF.BB"
  "XXA..G"
  "CDAIIG"
  "CDK.HH"
  "CDKEEE",
  
  "GGLL.B"
  "DDDEEB"
  "J.AXXB"
  "J.AHC."
  "IKAHC."
  "IK.HFF",
  
  "C.FFKK"
  "C.BEHH"
  "XXBE.."
  ".LBEAA"
  ".LJJ.G"
  ".IIDDG",
  
  "J..GAA"
  "JFFGIB"
  "XXDHIB"
  "KEDHCC"
  "KEDLL."
  "KEMM..",
  
  "DIIH.."
  "DB.HGG"
  "DBEXXJ"
  "AAE.LJ"
  "CCC.LK"
  "FFF..K",
  
  "..BIIC"
  "..BE.C"
  "XXBEFC"
  "HGGGF."
  "HDDA.."
  "JJ.A..",
  
  ".EJJ.."
  ".E.DBB"
  "XXKD.."
  "GGKD.."
  "HCCCAA"
  "HIIFF.",
  
  "FFEEH."
  "IBBBHC"
  "I.KXXC"
  "JJKD.C"
  "...DAA"
  "GGGD..",
  
  "A..FFF"
  "A.LLCC"
  "XXH..I"
  "JJHG.I"
  "BBBGKE"
  "DDD.KE",
  
  ".G.EED"
  ".GIIID"
  "HG.XXD"
  "HFFFJJ"
  ".AB.CC"
  ".AB.KK",
  
  ".FFJJJ"
  "BB.C.I"
  "KXXCGI"
  "KDAAGL"
  "HD...L"
  "HD.EEE",
  
  ".JHHLL"
  ".JCCCE"
  "XXBG.E"
  "..BGKK"
  "I.AAMD"
  "IFFFMD",
  
  "AAA..G"
  "CC...G"
  "IEEXXF"
  "I....F"
  "HJJBBB"
  "H...DD",
  
  "K.JJLL"
  "K.GGHH"
  "XXFE.."
  "DDFE.C"
  "AAAE.C"
  ".IIBB.",
  
  "EEEHB."
  "FKKHB."
  "FXXD.."
  "F.GDCC"
  "..GAAJ"
  "III..J",
  
  "..EE.."
  "..DFF."
  "XXD..."
  "..DAAA"
  "CCCB.."
  "GGGB..",
  
  "HH..IL"
  "CCC.IL"
  "XXA..K"
  "BFAGGK"
  "BF.EDD"
  "BJJE..",
  
  ".JJFB."
  "DDDFB."
  "XX.FGH"
  "E.KKGH"
  "E.CAAL"
  "IIC..L",
  
  "F.HH.."
  "FDDB.."
  "XXEB.G"
  "..EAAG"
  "..C..."
  "..C...",
  
  "EDD.G."
  "E.A.G."
  "XXAF.."
  "KK.FJJ"
  "CCCHHL"
  ".IIBBL",
  
  ".GCCFF"
  ".G.HD."
  "XX.HD."
  "IBBBDJ"
  "I.AKKJ"
  "I.AEEJ",
};

static int screen[37][19];

void draw_block(char *p, int ox, int oy, int horizontal, int block) {
  int i,j, x,y, w,h;
  // always at least 2, sometimes 3
  x = ox*6; y = oy*3;
  if (p[oy*6+ox] != block) {
    fprintf(stderr, "p[%d][%d] = %c, block = %c\n", ox, oy, p[oy*6+ox], block);
  }
  if (horizontal) {
    h = 3; w = 12;                                // GG
    if ((ox < 4) && (p[oy*6+ox+2] == block)) w = 18; // GGG
  } else {
    h = 6; w = 6;
    if ((oy < 4) && (p[(oy+2)*6+ox] == block)) h = 9;
  }
  for (j = y+1; j < y+h; j++) {
    for (i = x+1; i < x+w; i++) {
      screen[i][j] = (isprint(block) ? block : '?');
    }
  }
}

void One_Step(char *p, int c, int dir) {
  int i,j;
    for (j = 0; j < 6; j++) {   // top to bottom
      for (i = 0; i < 6; i++) { // left to right
        if (p[j*6+i] == c) { // first one it hits, topmost or leftmost
          
          if ((i < 4) && (p[j*6+i+2] == c)) {
            // left of horizontal triple
            //fprintf(stderr, "[3] left/right\n");
            if ((dir==LEFT) && (i > 0) && (p[j*6+i-1] == '.')) {
              // horizontal triple move left
              //fprintf(stderr, "[3] left\n");
              p[j*6+i-1] = c; p[j*6+i+2] = '.';
            } else if ((dir==RIGHT) && (i < 3) && (p[j*6+i+3] == '.')) {
              // horizontal triple move right
              //fprintf(stderr, "[3] right\n");
              p[j*6+i+3] = c; p[j*6+i] = '.';
            }
          } else if ((i < 5) && (p[j*6+i+1] == c)) {
            // left of horizontal pair
            //fprintf(stderr, "[2] left/right\n");
            if ((dir==LEFT) && (i > 0) && (p[j*6+i-1] == '.')) {
              // horizontal pair move left
              //fprintf(stderr, "[2] left\n");
              p[j*6+i-1] = c; p[j*6+i+1] = '.';
            } else if ((dir==RIGHT) && (i < 4) && (p[j*6+i+2] == '.')) {
              // horizontal pair move right
              //fprintf(stderr, "[2] right\n");
              p[j*6+i+2] = c; p[j*6+i] = '.';
            }
          }

          if ((j < 4) && (p[(j+2)*6+i] == c)) {
            // top of vertical triple
            //fprintf(stderr, "[3] up/down\n");
            if ((dir==UP) && (j > 0) && (p[(j-1)*6+i] == '.')) {
              // vertical triple move up
              p[(j-1)*6+i] = c; p[(j+2)*6+i] = '.';
              //fprintf(stderr, "[3] up\n");
            } else if ((dir==DOWN) && (j < 3) && (p[(j+3)*6+i] == '.')) {
              // vertical triple down
              p[(j+3)*6+i] = c; p[j*6+i] = '.'; 
              //fprintf(stderr, "[3] down\n");
           }
          } else if ((j < 5) && (p[(j+1)*6+i] == c)) {
            // top of vertical pair
            //fprintf(stderr, "[2] up/down\n");
            if ((dir==UP) && (j > 0) && (p[(j-1)*6+i] == '.')) {
              // vertical pair move up
              p[(j-1)*6+i] = c; p[(j+1)*6+i] = '.';
              //fprintf(stderr, "[2] up\n");
            } else if ((dir==DOWN) && (j < 4) && (p[(j+2)*6+i] == '.')) {
              // vertical pair down
              p[(j+2)*6+i] = c; p[j*6+i] = '.';
              //fprintf(stderr, "[2] down\n");
            }
          }

          return;
        }
      }
    }

}

void Move(char *p, int c, int direction, int steps) {
  while (steps --> 0) {
    One_Step(p, c, direction);
  }
}

static int next_game = 0;

void draw_screen(char *p) {
  int i,j;
  char block;

  for (j = 0; j < 18+1; j++) {
    for (i = 0; i < 36+1; i++) {
      if (j%3 == 0) {
        // +-----+------
        if (i%6 == 0) {
          screen[i][j] = '+';
        } else {
          screen[i][j] = '-';
        }
      } else {
        // |     |     |
        if (i%6 == 0) {
          screen[i][j] = ((j/3 == 2) && (i == 6*6) ? ' ' : '|');
        } else {
          screen[i][j] = ' ';
        }
      }
    }
  }
  for (j = 0; j < 6; j++) {   // top to bottom
    for (i = 0; i < 6; i++) { // left to right
      block = p[j*6+i];
      if (block == '.') continue;
      if ((i > 0) && (p[j*6+i-1] == block)) {
        // horizontal block handled already
      } else if ((i < 5) && (p[j*6+i+1] == block)) {
        // horizontal block
        draw_block(p, i,j, TRUE, block);
      } else if ((j > 0) && (p[(j-1)*6+i] == block)) {
        // vertical block handled already
      } else if ((j < 5) && (p[(j+1)*6+i] == block)) {
        // vertical block
        draw_block(p, i,j, FALSE, block);
      } else {
        // error
      }
    }
  }

  //for (i = 0; i < 6*6; i++) {
  //  fputc(p[i], stdout);
  //  if (i%6 == 5) fputc('\n', stdout);
  //}

  for (j = 0; j < 18+1; j++) {
    for (i = 0; i < 36+1; i++) {
      if (isprint(screen[i][j])) {
        fputc(screen[i][j], stdout);
      } else {
        fputc('!', stdout);
      }
    }
    fputc('\n', stdout);
  }
}

void skip_spaces(void) {
  int c;
  for (;;) {
    c = fgetc(stdin);
    if (c != ' ') break;
  }
  ungetc(c, stdin);
}

int parse_block(void) {
  int c;
  skip_spaces();
  c = fgetc(stdin);
  if (isalpha(c)) {
    if (islower(c)) c = toupper(c);
    return c;
  }
  ungetc(c, stdin);
  return -1;
}

int parse_dir(void) {
  int c;
  char dir[32], *s = dir;
  skip_spaces();
  c = fgetc(stdin);
  while (isalpha(c)) {
    if (islower(c)) c = toupper(c);
    *s++ = c;
    c = fgetc(stdin);
  }
  *s = '\0';
  ungetc(c, stdin);
  if (strcmp(dir, "UP")==0 || strcmp(dir, "U")==0) return UP;
  if (strcmp(dir, "DOWN")==0 || strcmp(dir, "D")==0) return DOWN;
  if (strcmp(dir, "LEFT")==0 || strcmp(dir, "L")==0) return LEFT;
  if (strcmp(dir, "RIGHT")==0 || strcmp(dir, "R")==0) return RIGHT;
  return -1;
}

int parse_count(void) {
  int c;
  skip_spaces();
  c = fgetc(stdin);
  if ('1' <= c && c <= '4') {
    return c-'0';
  }
  ungetc(c, stdin);
  return 1; // if nothing given
}

int get_newline(void) {
  int c;
  skip_spaces();
  c = fgetc(stdin);
  if (c == '\n') return 0;
  fprintf(stderr, "Unexpected input: ");
  do {
    c = fgetc(stdin);
    fputc(c, stderr);
  } while (c != '\n');
  return -1;
}

void fetch_new_game(char *p) {
  int i,j;

  if (next_game == NUM_GAMES) {
    fprintf(stderr, "LIKE A BOSS! - you finished all the games\n");
    exit(0);
  }
  for (j = 0; j < 6; j++) {   // top to bottom
    for (i = 0; i < 6; i++) { // left to right
      p[j*6+i] = puzzle[next_game][j*6+i]; // copy to writable string
    }
  }
  next_game += 1;
}

int main(int argc, char **argv) {
  int steps, direction, check;
  char block;
  char p[6*6];

  if (argc == 2) next_game = atoi(argv[1]);
  fetch_new_game(p);

  for (;;) {

    draw_screen(p);
    
    fprintf(stderr, "Move which block?: "); fflush(stderr);
    block = parse_block();
    direction = parse_dir(); // would be nice to auto-move 1 square
                             // if only 1 direction is open but needs
                             // very hack special-case code...
    steps = parse_count();
    check = get_newline();
    if (block < 0 || direction < 0 || check < 0) {
      fprintf(stderr, "Please enter a letter,\n"
                       "a direction, and an optional\n"
                       "number of steps to move.\n"
                       "For example, I Right 1\n"
                       " (or \"ir\" for short)\n");
      continue;
    }
    Move(p, block, direction, steps);
    if ((p[2*6+4] == 'X') && (p[2*6+5] == 'X')) {
      fprintf(stderr, "You win!\n");
      fetch_new_game(p);
    }
  }
  return 0;
}
