generators.ET0LTreeGrammar("tile (c) - the versatile"):
  (
    { AV0, AV1, BV0, BV1, AVf0, AVf1, BVf0, BVf1, D, Df },
    { startb:24, flipX:1, F+:4, G+:3, versatileB:0,
      versatileA:0, empty:0 },
    {
      {
        D -> AV1,
        Df -> AVf1,
        AV1 -> F+[versatileB, versatileB, AV0,BV0],
        AV0 -> F+[versatileA, flipX[versatileA], AVf1,BVf1],
        AVf1 -> F+[flipX[versatileB], flipX[versatileB], AVf0,BVf0],
        AVf0 -> F+[flipX[versatileA], versatileA, AV1,BV1],
        BV1 -> G+[versatileB, versatileB, BV0],
        BV0 -> G+[versatileA, flipX[versatileA], BVf1],
        BVf1 -> G+[flipX[versatileB], flipX[versatileB], BVf0],
        BVf0 -> G+[flipX[versatileA], versatileA, BV1]
      },
      {
        D -> empty,
        Df -> empty,
        AV1 -> versatileB,
        AV0 -> versatileA,
        AVf1 -> flipX[versatileB],
        AVf0 -> flipX[versatileA],
        BV1 -> versatileB,
        BV0 -> versatileA,
        BVf1 -> flipX[versatileB],
        BVf0 -> flipX[versatileA]
      }
    },
    startb[AV1,AV1,AV1,AV1,AV1,D,
           D,D,D,D,D,D,
           AVf1,AVf1,AVf1,AVf1,AVf1,Df,
           Df,Df,Df,Df,Df,Df]
  )
