Loading

AI Blitz #6

Work in progress about video transcriptions

Capture images from video and compare them to identify moves

demarsylvain

What to do with videos?

  • Motivation

After playing with the 4 first image puzzles (see my first Notebook here, with around 99% accuracy submissions)), it's time to face the last (but not least) puzzle about video transcription.

As it's a new field for me, I started some web researches, and here is where I am. One direction I found is to capture several images from each video, and analyse these images.

--> Could this bring back us to image model?

--> Could I use the FEN Notation transcription model to compare pictures?

  • Context

We have access to short video (around 1 seconde) of a chessboard with some moving pieces (around 4-8 moves). The objective is to translate the moves from each video.

  • AICrowd connexion 🔌
In [63]:
## - connect
!pip install --upgrade fastai git+https://gitlab.aicrowd.com/yoogottamk/aicrowd-cli.git >/dev/null
%load_ext aicrowd.magic

API_KEY = '9a2e6c9d08e7c93a08ce513ce20c4f6e'
%aicrowd login --api-key $API_KEY
  Running command git clone -q https://gitlab.aicrowd.com/yoogottamk/aicrowd-cli.git /tmp/pip-req-build-u393pd18
The aicrowd.magic extension is already loaded. To reload it, use:
  %reload_ext aicrowd.magic
Verifying API Key...
API Key valid
Saved API Key successfully!

Import Packages 📦

In [64]:
## - librairies
import cv2     # for capturing videos
import math   # for mathematical operations
import matplotlib.pyplot as plt    # for plotting the images
import matplotlib.image as mpimg
%matplotlib inline
import pandas as pd
from keras.preprocessing import image   # for preprocessing the images
import numpy as np    # for mathematical operations
from keras.utils import np_utils
from skimage.transform import resize   # for resizing images
from sklearn.model_selection import train_test_split
from glob import glob
from tqdm import tqdm
import string

# for model building
import keras
from keras.models import Sequential
from keras.applications.vgg16 import VGG16
from keras.layers import Dense, InputLayer, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D, GlobalMaxPooling2D
from skimage import io, transform
from skimage.util.shape import view_as_blocks

Access Data ♚♕♜♘♝♙

In [ ]:
## - data
%aicrowd dataset download --challenge chess-transcription -j 3

!mkdir data
!mkdir data/video
!unzip train.zip  -d data/video/ 
!unzip val.zip -d data/video/ 
!unzip test.zip  -d data/video/ 

!mv train.zip data/video/train.zip
!mv train.csv data/video/train.csv
!mv val.csv data/video/val.csv
!mv val.zip data/video/val.zip
!mv test.zip data/video/test.zip
!mv sample_submission.csv data/video/sample_submission.csv
In [65]:
video_df = pd.read_csv("data/video/train.csv")
video_df['VideoID'] = video_df['VideoID'].astype(str)+".mp4"
video_df
Out[65]:
VideoID label
0 0.mp4 e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2
1 1.mp4 c2b3 e1f1 f7e7 a3a4 e7e3 a4a5
2 2.mp4 f1c1 h6h7 h4f3 h2g4 f6g6 g4f6 c1g1 f6d7 g6f5
3 3.mp4 h4h5 a7b5 c4b2 d7e6 g1h3 h6f7
4 4.mp4 c6g6 b1c2 g6g5 a2b2 h4f5 e4d3
... ... ...
4995 4995.mp4 f2e1 b5b8 d1d2 c5c4 d2e2 b8b4
4996 4996.mp4 c7e6 h8b2 d5d4 c4c3 d4e4 c3d2 c8a7 h4g2 b6c6
4997 4997.mp4 g4e5 c5b4 f5b1 b4a5 b6a5 e3e4 g5h4 c4e5 h4g3
4998 4998.mp4 h7h5 h1e1 h8a8 e3d2 e7f7 a4a6 a8f8 e5f7
4999 4999.mp4 c1a1 g5h4 g2h2 d5c4 d2f3 b5b4 e3f4 d8e8

5000 rows × 2 columns

In [ ]:
video_dftest = pd.read_csv("data/video/sample_submission.csv")
video_dftest['VideoID'] = video_dftest['VideoID'].astype(str)+".mp4"
video_dftest['label'] = ''
video_dftest

From video to images 🎥📸

The aim is to transform the video into several images, as I should be easier to analysis these new images than the video itself. Most of the time, a movie contains 24 images per second of video. It could too much for this problem, maybe only 5 images could be enough.

For a starting point, we will try to decompose each video into 2 pictures (stored in a new folder), one at the beginning of the video, and a second at the end. A same label, the one of the original video, will be display for each image associated.

In [ ]:
!rm -rf data/video/train_frame
!mkdir data/video/train_frame
In [ ]:
for i in tqdm(range(8)):
#for i in tqdm(range(video_df.shape[0])):
  count = 0
  videoFile = video_df['VideoID'][i]
  cap = cv2.VideoCapture('data/video/train/' + videoFile)  # capturing the video from the given path
  frameRate = 2 #cap.get(5)                                   # frame rate
  x = 1
  while(cap.isOpened()):
      frameId = cap.get(1)                                 # current frame number
      ret, frame = cap.read()
      if (ret != True):
          print ('break')
          break
      if (frameId % math.floor(frameRate) == 0):
          print ('store')
          filename ='data/video/train_frame/' + videoFile + "_frame%d.jpg" % count;count+=1
          cv2.imwrite(filename, frame)                      # storing the frames
  cap.release()

print ("Done!")

Let's have a look at images resulting of the first video: we have now the start and the end view of the video. Could be enough to understand moves? I think so.

In [ ]:
f, axarr = plt.subplots(1,4, figsize=(15, 15))

for i in range(0,4):
  if(i == 1):
    axarr[i].set_title(video_df['label'][0], fontsize=12, pad=5)
  else:
    axarr[i].set_title('')
  axarr[i].imshow(mpimg.imread('data/video/train_frame/0.mp4_frame' + str(i) + '.jpg'))
  axarr[i].axis('off')
In [ ]:
f, axarr = plt.subplots(1,10, figsize=(20, 20))

for i in range(0,10):
  if(i == 2):
    axarr[i].set_title(video_df['label'][7], fontsize=12, pad=5)
  else:
    axarr[i].set_title('')
  axarr[i].imshow(mpimg.imread('data/video/train_frame/7.mp4_frame' + str(i) + '.jpg'))
  axarr[i].axis('off')

In order to associate the right label with the corresponding images, we create a new train dataset.

In [ ]:
# - getting the names of all the images
images = glob("data/video/train_frame/*.jpg")
video_name = []
image_name = []
frame_number = []
video_label = []

for i in tqdm(range(len(images))):
    # - creating the image name
    imageName = images[i].split('/')[3]
    image_name.append(imageName)
    # - creating the image label
    videoName = images[i].split('/')[3].split('_')[0]
    video_name.append(videoName)
    frameNb = images[i].split('/')[3].split('_')[1].split('.')[0][5:]
    frameNb = int(frameNb)
    frame_number.append(frameNb)
    videoLabel = video_df[video_df['VideoID'] == videoName]['label'].iloc[0]
    video_label.append(videoLabel)

# - storing the images and their class in a dataframe
image_df = pd.DataFrame()
image_df['VideoID'] = video_name
image_df['frame'] = frame_number
image_df['ImageID'] = image_name
image_df['label'] = video_label

# - converting the dataframe into csv file 
image_df.to_csv('data/video/image_df.csv', header = True, index = False)

image_df = image_df.sort_values(['VideoID', 'frame'])
image_df.index = range(image_df.shape[0])
image_df
100%|██████████| 91/91 [00:00<00:00, 967.63it/s]
Out[ ]:
VideoID frame ImageID label
0 0.mp4 0 0.mp4_frame0.jpg e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2
1 0.mp4 1 0.mp4_frame1.jpg e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2
2 0.mp4 2 0.mp4_frame2.jpg e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2
3 0.mp4 3 0.mp4_frame3.jpg e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2
4 0.mp4 4 0.mp4_frame4.jpg e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2
... ... ... ... ...
86 7.mp4 5 7.mp4_frame5.jpg a8d8 d1c1 f8g7 f4e3 f7f5 b5c6
87 7.mp4 6 7.mp4_frame6.jpg a8d8 d1c1 f8g7 f4e3 f7f5 b5c6
88 7.mp4 7 7.mp4_frame7.jpg a8d8 d1c1 f8g7 f4e3 f7f5 b5c6
89 7.mp4 8 7.mp4_frame8.jpg a8d8 d1c1 f8g7 f4e3 f7f5 b5c6
90 7.mp4 9 7.mp4_frame9.jpg a8d8 d1c1 f8g7 f4e3 f7f5 b5c6

91 rows × 4 columns

Training 💪

The solution is not explored yet.

In [ ]:
## creating an empty list
#train_images = []

## for loop to read and store frames
#for i in tqdm(range(image_df.shape[0])):
#    # loading the image and keeping the target size as (224,224,3)
#    img = image.load_img('data/video/train_frame/' + image_df['ImageID'][i], target_size=(224,224,3))
#    # converting it to array
#    img = image.img_to_array(img)
#    # normalizing the pixel value
#    img = img/255
#    # appending the image to the train_image list
#    train_images.append(img)
#    
#train_array = np.array(train_images)
#train_array.shape

FEN Notation 📝

I already developed a model (3rd puzzle of this challenge) to translate a chessboard image to its FEN Notation. One solution could be to compare the FEN Notations of 2 pictures from the same video, and build a quite complex function to identify required moves to go from one notation to the second.

In [67]:
# load json and create model
json_file = open('FEN_model.json', 'r')
FEN_model_json = json_file.read()
json_file.close()
FEN_model = keras.models.model_from_json(FEN_model_json)
# load weights into new model
FEN_model.load_weights("FEN_model.h5")
print("Loaded FEN model from disk")
Loaded FEN model from disk

Translate FEN Notation from new images

In [68]:
def pred_gen(features, batch_size):
    for i, img in enumerate(features):
        yield process_image(img)

def process_image(img):
    downsample_size = 200
    square_size = int(downsample_size/8)
    img_read = io.imread(img)
    img_read = transform.resize(
      img_read, (downsample_size, downsample_size), mode='constant')
    tiles = view_as_blocks(img_read, block_shape=(square_size, square_size, 3))
    tiles = tiles.squeeze(axis=2)
    return tiles.reshape(64, square_size, square_size, 3)

By applying the FEN model, we create an array of 64 values (one for each case of the chessboard), and this for each image. We already developped a function to translate this array into a FEN Notation. But for the purpose of this challenge (translate moves), we should developped a new function.

--> How build a function that compare 2 successive arrays, detect difference and associate it to a move?

In [69]:
path1 = 'data/video/train_frame/' + image_df['ImageID'][0]
oh1 = FEN_model.predict(process_image(path1)).argmax(axis=1).reshape(-1, 8, 8)[0]
oh1
Out[69]:
array([[12,  3, 12, 12, 12, 12,  1, 12],
       [ 2, 12, 12, 12, 12, 12, 12, 12],
       [12, 12, 12, 12,  0,  6,  4,  0],
       [ 1, 12, 12, 12, 12, 12, 12, 12],
       [12, 12,  6, 12, 12, 12, 12,  0],
       [ 3, 12, 12, 12, 12, 12, 12,  6],
       [ 6, 12,  7, 12, 10, 12,  6, 12],
       [12, 12, 12, 12, 12, 12, 12,  7]])
In [70]:
path2 = 'data/video/train_frame/' + image_df['ImageID'][1]
oh2 = FEN_model.predict(process_image(path2)).argmax(axis=1).reshape(-1, 8, 8)[0]
oh2
Out[70]:
array([[12,  3, 12, 12, 12, 12,  1, 12],
       [ 2, 12, 12, 12, 12, 12, 12, 12],
       [12, 12, 12, 12,  0,  6,  4,  0],
       [ 1, 12, 12, 12, 12, 12, 12, 12],
       [12, 12,  6, 12, 12, 12, 12,  0],
       [ 3, 12, 12, 10, 12, 12, 12,  6],
       [ 6, 12,  7, 12, 12, 12,  6, 12],
       [12, 12, 12, 12, 12, 12, 12,  7]])
In [71]:
def move_from_2onehots(oh1, oh2):
    case = ''
    for j in range(8):
        for i in range(8):
            if(oh1[j][i] != oh2[j][i]):
                case += 'abcdefgh'[i] + str(8-j)
    
    if(case == ''):
      #print('no move')
      return case

    if(oh2[8-int(case[1])][string.ascii_lowercase.index(case[0])] != 12):
      output = case[2:] + case[:2]
    else:
      output = case

    return output

move_from_2onehots(oh1, oh2)
Out[71]:
'e2d3'
In [ ]:
train_moves = []

for i in tqdm(range(image_df.shape[0]-1)):

    if(image_df['ImageID'][i].split('_')[0] == image_df['ImageID'][i+1].split('_')[0]):
        path1 = 'data/video/train_frame/'+ image_df['ImageID'][i]
        #print(path1)
        oh1 = FEN_model.predict(process_image(path1)).argmax(axis=1).reshape(-1, 8, 8)[0]

        path2 = 'data/video/train_frame/'+ image_df['ImageID'][i+1]
        #print(path2)
        oh2 = FEN_model.predict(process_image(path2)).argmax(axis=1).reshape(-1, 8, 8)[0]

        detected_move = move_from_2onehots(oh1, oh2)
        print(detected_move)
        train_moves.append(detected_move)
    
    else:
        train_moves.append('')

train_moves.append('')
In [ ]:
image_df['moves'] = train_moves
image_df
Out[ ]:
VideoID frame ImageID label moves
0 0.mp4 0 0.mp4_frame0.jpg e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2 e2d3
1 0.mp4 1 0.mp4_frame1.jpg e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2
2 0.mp4 2 0.mp4_frame2.jpg e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2 b8d7
3 0.mp4 3 0.mp4_frame3.jpg e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2
4 0.mp4 4 0.mp4_frame4.jpg e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2 d3d2
... ... ... ... ... ...
86 7.mp4 5 7.mp4_frame5.jpg a8d8 d1c1 f8g7 f4e3 f7f5 b5c6
87 7.mp4 6 7.mp4_frame6.jpg a8d8 d1c1 f8g7 f4e3 f7f5 b5c6 f4e3
88 7.mp4 7 7.mp4_frame7.jpg a8d8 d1c1 f8g7 f4e3 f7f5 b5c6 f7f5
89 7.mp4 8 7.mp4_frame8.jpg a8d8 d1c1 f8g7 f4e3 f7f5 b5c6
90 7.mp4 9 7.mp4_frame9.jpg a8d8 d1c1 f8g7 f4e3 f7f5 b5c6

91 rows × 5 columns

In [ ]:
video_moves = []

output = image_df['moves'][0]
print(output)
for i in tqdm(range(image_df.shape[0]-1)):
    if(image_df['VideoID'][i+1] == image_df['VideoID'][i]):
      if(image_df['moves'][i+1] != ''):
        output += ' '
        output += image_df['moves'][i+1]
        #print(output)
    else:
      video_moves.append(output)
      output = output = image_df['moves'][i+1]
video_moves.append(output)

video_moves
100%|██████████| 90/90 [00:00<00:00, 25187.65it/s]
e2d3

Out[ ]:
['e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2',
 ' c2b3 e1f1 f7e7 a3a4 e7e3 a4a5',
 ' f1c1 h6h7 h4f3 h2g4 f6g6 g4f6 c1g1 f6d7 g6f5',
 ' h4h5 a7b5 c4b2 d7e6 g1h3',
 ' c6g6 b1c2 g6g5 a2b2 h4f5 e4d3',
 ' f1e1 a8e8 e1f1 c5d3 b1b5 f8e7',
 'a3a1 f8f7 a1f1 e7c7 f2e3 e5f6 f1c1 f6c3',
 'a8d8 d1c1 f8g7 f4e3 f7f5']
In [ ]:
video_df.head(n = 8)
Out[ ]:
VideoID label
0 0.mp4 e2d3 b8d7 d3d2 g6h7 c4c5 a5a4 d2c1 a7c5 c2f2
1 1.mp4 c2b3 e1f1 f7e7 a3a4 e7e3 a4a5
2 2.mp4 f1c1 h6h7 h4f3 h2g4 f6g6 g4f6 c1g1 f6d7 g6f5
3 3.mp4 h4h5 a7b5 c4b2 d7e6 g1h3 h6f7
4 4.mp4 c6g6 b1c2 g6g5 a2b2 h4f5 e4d3
5 5.mp4 f1e1 a8e8 e1f1 c5d3 b1b5 f8e7 f1c1
6 6.mp4 a3a1 f8f7 a1f1 e7c7 f2e3 e5f6 f1c1 f6c3 b3c3
7 7.mp4 a8d8 d1c1 f8g7 f4e3 f7f5 b5c6

It seems to work, but not perfectly, as I missed sometimes the last moves! It's due to images, I don't know why, but sometimes I didn't capture the last view of the video. Maybe I will have to increase the number of frames. Let's try to make a submission with this.

Apply to test dataset

In [72]:
!rm -rf data/video/test_frame
!mkdir data/video/test_frame
In [ ]:
for i in tqdm(range(video_dftest.shape[0])):
  count = 0
  videoFile = video_dftest['VideoID'][i]
  cap = cv2.VideoCapture('data/video/test/' + videoFile)  # capturing the video from the given path
  frameRate = 1                                           # frame rate
  x = 1
  while(cap.isOpened()):
      frameId = cap.get(1)                                 # current frame number
      ret, frame = cap.read()
      if (ret != True):
          print ('break')
          break
      if (frameId % math.floor(frameRate) == 0):
          print ('store')
          filename ='data/video/test_frame/' + videoFile + "_frame%d.jpg" % count;count+=1
          cv2.imwrite(filename, frame)                      # storing the frames
  cap.release()

print ("Done!")
In [74]:
# - getting the names of all the images
images_test = glob("data/video/test_frame/*.jpg")
video_name = []
image_name = []
frame_number = []

for i in tqdm(range(len(images_test))):
    # - creating the image name
    imageName = images_test[i].split('/')[3]
    image_name.append(imageName)
    # - creating the image label
    videoName = images_test[i].split('/')[3].split('_')[0]
    video_name.append(videoName)
    frameNb = images_test[i].split('/')[3].split('_')[1].split('.')[0][5:]
    frameNb = int(frameNb)
    frame_number.append(frameNb)

# - storing the images and their class in a dataframe
image_dftest = pd.DataFrame()
image_dftest['VideoID'] = video_name
image_dftest['frame'] = frame_number
image_dftest['ImageID'] = image_name

# - converting the dataframe into csv file 
image_dftest.to_csv('data/video/image_dftest.csv', header = True, index = False)

image_dftest = image_dftest.sort_values(['VideoID', 'frame'])
image_dftest.index = range(image_dftest.shape[0])
image_dftest
100%|██████████| 43910/43910 [00:00<00:00, 335251.75it/s]
Out[74]:
VideoID frame ImageID
0 0.mp4 0 0.mp4_frame0.jpg
1 0.mp4 1 0.mp4_frame1.jpg
2 0.mp4 2 0.mp4_frame2.jpg
3 0.mp4 3 0.mp4_frame3.jpg
4 0.mp4 4 0.mp4_frame4.jpg
... ... ... ...
43905 999.mp4 23 999.mp4_frame23.jpg
43906 999.mp4 24 999.mp4_frame24.jpg
43907 999.mp4 25 999.mp4_frame25.jpg
43908 999.mp4 26 999.mp4_frame26.jpg
43909 999.mp4 27 999.mp4_frame27.jpg

43910 rows × 3 columns

In [ ]:
#pred = (
#  FEN_model.predict_generator(pred_gen(images_test, 64), steps=1000)
#  .argmax(axis=1)
#  .reshape(-1, 8, 8)
#)
In [75]:
test_moves = []

for i in tqdm(range(image_dftest.shape[0]-1)):

    if(image_dftest['ImageID'][i].split('_')[0] == image_dftest['ImageID'][i+1].split('_')[0]):
        path1 = 'data/video/test_frame/'+ image_dftest['ImageID'][i]
        oh1 = FEN_model.predict(process_image(path1)).argmax(axis=1).reshape(-1, 8, 8)[0]
        path2 = 'data/video/test_frame/'+ image_dftest['ImageID'][i+1]
        oh2 = FEN_model.predict(process_image(path2)).argmax(axis=1).reshape(-1, 8, 8)[0]
        detected_move = move_from_2onehots(oh1, oh2)
        test_moves.append(detected_move)
    
    else:
        test_moves.append('')

test_moves.append('')

image_dftest['moves'] = test_moves
image_dftest
100%|██████████| 43909/43909 [2:51:25<00:00,  4.27it/s]
Out[75]:
VideoID frame ImageID moves
0 0.mp4 0 0.mp4_frame0.jpg
1 0.mp4 1 0.mp4_frame1.jpg
2 0.mp4 2 0.mp4_frame2.jpg b4f8
3 0.mp4 3 0.mp4_frame3.jpg
4 0.mp4 4 0.mp4_frame4.jpg
... ... ... ... ...
43905 999.mp4 23 999.mp4_frame23.jpg g1g2
43906 999.mp4 24 999.mp4_frame24.jpg
43907 999.mp4 25 999.mp4_frame25.jpg
43908 999.mp4 26 999.mp4_frame26.jpg b8a8
43909 999.mp4 27 999.mp4_frame27.jpg

43910 rows × 4 columns

In [76]:
video_moves = []

output = image_dftest['moves'][0]
print(output)
for i in tqdm(range(image_dftest.shape[0]-1)):
    if(image_dftest['VideoID'][i+1] == image_dftest['VideoID'][i]):
      if(image_dftest['moves'][i+1] != ''):
        output += ' '
        output += image_dftest['moves'][i+1]
        #print(output)
    else:
      video_moves.append(output)
      output = output = image_dftest['moves'][i+1]
video_moves.append(output)

video_moves
  9%|▉         | 4143/43909 [00:00<00:00, 41429.15it/s]

100%|██████████| 43909/43909 [00:01<00:00, 43721.84it/s]
Out[76]:
[' b4f8 a6a8 b1c3 e8d7 a3a1 b8c6',
 ' b3b2 d1c3 b2d2 b6b3 a2b2 f3e2 a3b5 e2f3 b2b3',
 ' g7f7 c3f3 h5h4 f3f2 f8d6 f1g1 f7f2 d4d5 f2f5',
 ' e5e6 b4a3 a7h7 b5b3 h2g1 b3b1 g1f2 b1g1 h7d7',
 ' e5e4 b3b2 e4d4 c1d2 c6d8 f4e6 d8e6 a2a4 e6d8',
 ' c3b4 a7c5 e4c4 h2h1 b7g2 a8c8 c1b1',
 ' b6b5 h7d7 b5c6 g6f4 b4b3 d7g7 c5c4',
 ' a7b8 g1g2 d5d6 g2h3 d6c5 a6a7 c8a7 g4e5',
 ' c4d3 g7h7 g3g4 e8b5 g4f5 h7h5 e3g4',
 ' e2e4 b8a6 d2d3 b5c4 c1d2',
 ' e1a5 c6c4 d7f6 c4e4 d3e4 g7h8 f6h7 b8d8',
 ' f5f3 b7b5 f3g3 e3f5 g3e5 a7a6 b1a3',
 ' h8f8 a2b1 e5f5 g5f5 f8e8 c2d4 h7h8',
 ' h3f4 d6e4 f7g8 f8g7 f4d5',
 ' c6c4 h3h6 d4f5 e7d7 f5h6 d7c7 g4f5',
 ' d7d6 c4b6 h5h4 b6c4 h6f7',
 ' d7b8 a5a4 c2c4 d5d4 d1b3',
 ' d3g3 a8b7 b1b2 b7h1 g3e5 b8b6 e5g7 f8e8 h2d2',
 ' c4c5 h4h2 e2e3 b8c6 d2e2',
 ' h7b7 h3g3 d4e3 c1a1 f8g7',
 ' e4d5 d2b4 b3b4 e2d1 e8d6 f1f2 b4e4 d1b3',
 ' d6d5 b4b5 d3c2 d1e2 a6b5 b6a7',
 ' e1g3 g8b8 g2h2 b8g8 e5f6',
 ' b2b4 h6h5 f1g2 h8h7 c1a3 f8g7',
 ' e2d3 c8f5 h7h1 c7a7 g1h3 f5h5 d3e2 h5f5 e2e1',
 ' f4d3 g7e7 g4e4 e7e6 d3b4 g5g4 b4d3',
 ' f4d6 a6a5 d6g3 f2g3 a8b7',
 ' d1c1 h5g5 d7b8 e7c7 a3a4 f8e7 a2f2 c7d7',
 ' g5e3 d7d8 d3c2 b8e5 c2b1 e5d6 e3d4',
 ' h3h1 c6a6 h1c1 h4g2 a5b4 g3f3 c3b5',
 ' g2h3 h6h5 f4f5 f8h6 a2a3 b7c5',
 ' f6c6 c3c4 d5c4 f1d3 c6f6',
 ' a1b2 c7g3 c2c1 b7a6 g4f2 e8e1 f2d1 e1d1 h1d1',
 ' c8c7 f2f5 a6f1 f5f3 c7c2 h2g3 g7h8 f3f5 c2c3',
 ' g7g6 c3c4 d8h4 g1f3 h4g5',
 ' c4c5 g5f4 d2e1 b7b6 e1a5 e7g5 c5b6 g5h6 d3d4',
 ' e7b4 g8h8 a3c2 a7a6 c1d2',
 ' e4f2 b4c2 a3d6 d7a7 f2d1 a7h7 c8e6 h7f7',
 ' b2b3 h5g3 d2b2 d8c8 a2b1',
 ' g1f3 e8f7 d1h1 a7a5 h2g2 f7e7',
 ' c4f1 g3g4 a3c5 g1e3 c5f8 e3d4 f8c5 h4h3 f1d3',
 ' c6c5 d4c5 e7e8 c2d1 e8e7',
 ' g2h3 c2d2 d3g6 b2a3 f3e3',
 ' f4f5 h5h4 g3h3 f6f7 c2c6 e8e7 d4d5',
 ' a7a5 d2e2 f8f6 f1c1 e7e6 c1c8 a5b5 c8e8',
 ' g1f3 g4f3 g2f3 e7f6 a6a7 c6c7 a1e1 h3h8',
 ' d7d6 e3d5 b5c4 c1h6 c4c7 h6e3 c7b6 b3b5',
 ' c5d5 d7c7 d5e5 h5g4 d1g4',
 ' b3a5 b5b4 b1c1 h6f5 a6b6 f5e3 b6b4',
 ' e7f6 b5c7 e8f8 h4f5 c3d2 e1d2 c6b4',
 ' f7g6 e1a5 f5f4 g5f6 c5c4 b2b6 h6f5 a1c1',
 ' f5g5f6 g4d7 h2h4 d7c6 b2b4 c6h1 c1a3 c5b4',
 ' a3c1 f4e6 g7g6 b3b4 c1b2 e6c5 e7c7 f3g2',
 ' c5f2 c2c6 f2b6 e8f7 f1h3',
 ' d6e7 a1a2 f4h4 b6g1 b7b5 g1c5 e7f6 d1g1',
 ' b2d3 d7e7 d3e5 e7e8 d5d7 a6a5 d7a7',
 ' b6b5 d3d2 h8h7 e2e3 h7h8 d2c3',
 ' b7e7 f5e4 e6g4 h7f6 g4g3 b2a1 e8g8 e4d4',
 ' g4h5 d7b8 f2f3 f6e4 a1c1',
 ' a7a8 d4b6 d7d5 g2g4 f6e7 b6a7 c7c6 a7b6 d8d7',
 ' b7e7 d3d4 e8c6 d1c1 e7c7 g6e7 b5b4',
 ' f1h3 b5c6 c2a3 a8a6 b2a1 e5c5',
 ' d6e7 f1e1 f4f3 g2g3 e3d2',
 ' f1b5 d6e5 b1d1 d2b1 f3e3 d5d4',
 ' c2c3 h6f7 e2f3 e6e5 f3e4 f5e4 g3g4',
 ' c7e7 c4a2 g3f3 f2g2 f3f1 g1e2 f1e1 e2c1',
 ' a1a2 e8d8 b6d7 d8e7 a4b5 c6d5',
 ' d5f5 e2f3 f5e5 a3b5 g8f8',
 ' c7d7 d2b4 e1c3 b4c5 c3d2 c5c3 g7h7 a7c6 d7c8',
 ' f2d3 b1a3 d3f2 a6b4 c5a7',
 ' a7a8 a3c1 d4d3 c1b2 e7c8 g6g4 d8e7 a2a4 d6c5',
 ' c4b3 g2g1 d1e2 h8g7 h4d8 a7b7 b1b2 b7b4',
 ' a2d5 b1f5 d4e5 f5e4 e5b2',
 ' c1d2 f5f4 b2b3 g7e5 h1h3 e8f8 d2f4',
 ' f3e4 d4c5 b8a8 c2b2 a5b3 b2b3',
 ' e4g5 a5e5 g5e4 e6d4 e4d6 f8d8 f2f4',
 ' a7a5 e3e4 h8h7 b2d3 b6b5 d2a5',
 ' f6h6 d1d6 e6e5 d6f6 f7g8 c1c2 g8g1',
 ' c1b1 b6b5 f3g5 f6d5 b1c2 g8h8 g5e6 d5f6 a4b6',
 ' h3g5 h1f2 g5e6 c6b7 e6g5',
 ' a5a6 b8b7 d1e2 e8f7 g1h1',
 ' g2g6 b8b6 g6g7 b6d6 e2f1 b4c3',
 'b6 c3b2b3 c3 g7g6 d1d4 e6e5 d4e5',
 ' a6a8 d7c6 d6f7 c6e8 h2e2 f8b4 e2d2 e8d8',
 ' h2h4 a6b6 b5d4 e7d7 g1d1 a1c3 d4c6',
 ' b7c6 d6a3 e2e1 h1h2 a7b7 h2g3 b7a7 d5d6 e1b1',
 ' c3e2 a2b2 f4f5 c4c3 e2g1 h8h7 d1h5 e7e6 h5g6',
 ' f5e6 f8d7 h8a8 d7f8 a8e8 h2a2',
 ' e3c2 f6h5 d6d7 b5a5 a7b8 b2a2',
 ' a1b1 b8d8 b4c6 e7g6 d4e5 a6b4',
 ' e2d1 b3a2 e3f2 h8g7 b6c8 g7e5 f2f1 a2b1',
 ' a5a6 d6c5 b2b3 e8b8 d3c4 d4b5 e5e8 b8e8 b3b4',
 ' d7e8 e1c2 a6c6 b3c4 c6b5 a8b7 e7g7 b7f3',
 ' a6b5 d1b2 d8c8 h2h1 c8a8',
 ' f8e7 a2b2 d2b3 f3g5 b3d2 h8g7 d2b1',
 ' g5g8 g1f3 a3c2 c7c6 a5a7 f3g5 g8h8 h6g6 c1d2',
 ' b1h7 h8f8 a1d4 d8b7 d4b6 f2e2 d1c1 e2g2 h7g6',
 ' f4g6 d6d5 g6f8 c5c4 h2b2',
 ' b1c1 f5d4 e2d4 c5d4 f4f5 f7d7 d1h1',
 ' a5d8 f6g8 f1g1 g8f6 h2h3',
 ' c3a1 c1c3 a8b7 c3c1 b7a6 f3g5 f7f5 g5f7 e8f7',
 ' a8b8 b4a4 b8b6 b2b4 g7g5 c1b2 e8e7',
 ' b6a6 b2b5 c8g4 b5b6 g4h5 b6b8 a6e6 d3d4 h5h2',
 ' c1d3 g5f7 a7a6 f7d6 c8d8 d6b5 g6h5',
 ' d8d7 c2b3 f7f8 b3b1 d5c4',
 ' e7f8 e3d2 b8a8 e6c8 a8c8 f4f5 f8g7 c5c6',
 ' a5a6 h4e1 d2e1 e6e3 e1f2 h5h6 g2g3 f3g2',
 ' e8d8 f4e6 d8e7 a1b1 f8h6 b3c1 e4e3 f1b5',
 ' d3d2 d1c1 d7f8 d6b8 d2a2 c1d1',
 ' f4e2 b8a8 c1d1 c7c8 e5f6 a8a7',
 ' f8c5 a2a3 h6f8 f3h2 e6e5',
 ' b2a3 g8g3 f4f5 e4f2 d1e2 f3f4 c6b8 f2e4 b8c6',
 ' f2e4 g4e4 e1d1 f8c5 h2d2 c7h7 a2a1',
 ' b2c3 f7f5 c1b2 b4b2 d1b1 b2h2',
 ' e4e5 g6f5 e1d1 f5f3 g2f3 c6a5 c2c4 e7d7',
 ' b7c8 b2a3 c2a3 g4g5 a4c6 d1e1 a3c2',
 ' b5a5 c7d6 d3b2 d6e5 d2e3 b7a8 a5a8 h8h7 a8b8',
 ' h6h5 b2d4 e6e5 h1h2 e8e7 d4c3 a5a4',
 ' f5e3 f4f6 c8c3 f6g6 b4b3 g6e4 e8d8 e4e7 d8c8',
 ' h7f7 e8d7 a3b2 b8a6 f2g1 a7a8 e2f4',
 ' b7b5 h1h2 c8e6 c1g5 h8h7 b1a3 e6h3 a4a5 b5b4',
 ' c3b2 g1b6 e5d5 b6d4 d5c6 b5c6',
 ' d4e5 b6b5 c5e7 h8d8 b7c6 c1c6 e7f8',
 ' h3h2 c4d6 g6f7 e1f2 f7h5 a1e1 e7e6 d6e8 b5d3',
 ' g3f3 g8h6 c4a6 h6f7 h1h3',
 ' c4b3 e1e2 d7c8 e2e3 a6c6 a2e2 c6c5 e3d2',
 ' e1d1 e5h2 c2c3 g8h6 a4b3 h6g8 g1f3 b8a6 f3d4',
 ' g3e3 d6d7 e3a3 a2b1 a3a1',
 ' e6e4 g2h1 e4f4 e2f4 c3b2',
 ' b6a5 e7e6 b1b7 e6f5 g2g3 f5e4',
 ' h2h1 f8e8 c4b5 h6f7 h1g1 e8e6 c1f4',
 ' b1d1 f6f5 d1f1 c7c6 d2e3',
 ' d8c7 a4d1 f8d8 h6h5 d8e8 g2h2 e4f2 d1b3 f2h3',
 ' f7f5 c2e2 e6g6 f2e1 d6f6',
 ' b7a6 h7h1 f6e8 h1f1 c8c4 a1d4 e4e3',
 ' c3d5 f7f5 f2f3 g8e7 d5c3 e7g8 b6c4 e8f7',
 ' g3e4 b3h3 e4g5 g1f1 g7e5',
 ' a1a5 g2g4 a5d5 c4d2 c8a6 d2c4 a6c8 c1d2 d5e5',
 ' d8c8 e1f1 h6g6 h5h7 e6d8 g2h4 e7e8',
 ' c6d7 a4b4 h3h2 b4b1 h1b1',
 ' f6b6 d7e8 c1h1 g8g2 e5e6 g2g5 b3a2',
 ' g5g7 d2a2 c3d2 a2d2 g7d7',
 ' h7f8 c2h2 e4g2 c1b2 f7g6 c6c7',
 ' b3a4 a8b8 h3h4 d6f6 e2e1 a7a6',
 ' a3a4 d5b3 d1d2 f8c8 d2d3 c8c2 f3h1 c2c7 d3d4',
 ' g3g4 e6e5 h1g1 c5b4 g1g2 b4d6 b1c3 c6d8 a2a4',
 ' c7c6 e2e3 e5e4 h2h1 h8f8 d2c1 g6g5 d1c2 d8a5',
 ' b5a7 g5h4 g2c6 a6b7 e1d1 f6f5 a1a3',
 ' d2h6 e8f7 c1f4 b8d7 h6h4',
 ' b7b5 c2c4 g8g7 d1c1 g7g8',
 ' e2d2 e3g1 c2d1 h6h5 d2d5',
 ' e4e5 h4g3 h2g3 g7g6 h1g1 e8e7',
 ' e7c8 e3f4 c8b6 e1e5 b4b3',
 ' h1h2 c6b4 g1e2 b4c6 g4h3 b6d4',
 ' d4d5 h4f4 h1f1 f7e7 e3a7 a8e8 a3c3 e8c8',
 ' a5c7 c4c1',
 ' e6e5 e2b5 e8e7 b5d3 e7d8 d3c4 h4h3 c4d3 f1h2',
 ' h8h6 a1a6 g7e5 a6a7 e7a7 f1d2 b8c8 g2h1',
 ' d7b5 e2e1 b5a4 h7h2 a4c6',
 ' b7c8 g2h1 b8d7 g4h5 a4b4',
 ' d3c4 d5c4 h4g5 b8e8 f1e1 h8h2',
 ' f8h6 h3e6 e4e5 h2g2 f7e6',
 ' h7h6 f6e4 f2e1 e4g3 c1a3 b8c6',
 ' d1e2 g4h4 g1h1 e4c5 e2e6 h4e7 d2d4',
 ' c7b7 f3e4 g7h8 h1c1 f8g7 g5f7 h8h7 f4g5 c8g4',
 ' d4f6 d3c2 f5g3 f2g3 f6h4',
 ' a7a8 h4e7 a6a5 b4c5 b3c4 c6c7 a8b8',
 ' f8h7 b1d3 g7f7 h1g2 h7g5 e5g5 a5a8 d3c4',
 ' e5d5 f6e6 c8d8 b3a4 d5g5 e6e8 d8e8 a4d1',
 ' b6d6 b1c3 a7a6 a2a3 b7b5 c3a2',
 ' c2b2 g7d7 f6h7 d6c7 e6e7',
 ' b4a4 a6a7 e1f2 h5h4 c4d3 h7e7 d2f1 b7b5 a4d4',
 ' h4g2 b7g2 b3g8 g2a8 g4g3 d1h5 h8h5',
 ' g3f4 g2g6 f7e5 e8d8 f4e3 c5b4 e5d7',
 ' h6h7 e4d2 d7c6 d2b1 h7g8 g6e8 c6d6 g2g8',
 ' c1h1 f8e7 c2d1 e7d6 d5c4 g5e4 c4d3 d6e7',
 ' g6h4 e2a2 h4g6 g7e8 g6h4 a2b2 h3h2',
 ' d6h6 c7c4 g7g6 e4f5 h6h5 a2a3',
 ' h5f6 d5e4 d8e7 g1h1 c8g8',
 ' d1d4 f5e6 f3h1 c7c6 a3a2 e6f5',
 ' g8f8 h4h5 h6g4 g2e2 a8b6 a7b5',
 ' b8b5 c3a3 a5c3 g3h4 b5d5 f1e3 c3e1 f2e1 a6c8',
 ' e5e6 a6a5 g7g8 e7e8 e2e3 h4g5 e3d4',
 ' e8d8 b2a3 c7c5 g5g2 a8c8',
 ' d7a4 b8e5 h6h5 e5g7 a4b3 a3a4 c8e6',
 ' b7d8 h2h1 c7b7 e4d3 d8e6 d3e4 a2c2',
 ' f5f6 d7c6 a1a4 b6b5 a4a1 a8e8 c1e3 e8b8 e3f2',
 ' c8d8 a5f5 a6a8 d3f1 c2c1 e1e2 c1c6 f5a5 g8f6',
 ' h5g5 b3b4 d7c8 d1a4 e8f7 a3b5 f7e8',
 ' g1b1 e2c1 e3e1 c1e2 a6d6 d7e8 c4e2',
 ' d6d4 c7b8 d4d8 c6c7 b3b8 c7b8',
 ' e8d7 b1d2 h8g8 d1c1 a6b5 a5a4',
 ' b1d2 a8d8 c6e5 f3g2 c2c4',
 ' g6c2 c1b2 c2b3 b2c1 g8e7 e1e2 b3b2',
 ' e6c4 d6b4 c4e6 b4e7 e6d7',
 ' g2g3 a5a4 d2d3 f6f5 f1h3',
 ' a8a4 f4c7 e2f1 d2b2 g7f8',
 ' a6a5 g1h1 b6b5 e2f1 d7b6 a1a2',
 ' h4e4 e6d8 e2c4 c5e5 b8d7 f6g7 e1f1 e5e6',
 ' b4a3 b1b5 c5b6 b5b1 h7h5 d1c2 f8f7',
 ' g5h6 a6b5 d3e4 f6f5 b1c1',
 ' f1g1 g4h3 g1c1 d2c2 g8h6 c2f2 f7g8 f2c2',
 ' a1b2 e1e2 h6g5 e2e1 c8d8 f1e2 b2c1',
 ' g8h6 c1a3 e5e4 e1d1 f7g8 d2d3 f6f5',
 ' h8h7 d5e7 f8g7 b1a1 g7h8 h2h3 a8a7',
 ' h2f3 g5h4 f2g2 e7e8 h1e1 h4e7 g6g7 g8h6',
 ' e1f1 h8f8 e4e5 f6d7 f4h3 d8c8 d4c6 e7e8',
 ' g5h4 c6b7 f5f4 e2f3 h4f6 b7c8 a6a5',
 ' e5d5 g8e7 d5f5 h8d8 g1h2 d7b8 f5d5 c3d3',
 ' b3b4 b8c8 e2g4 a5a4 e5c6 g7g6',
 ' h3f4 c6c5 a2a3 e8e7 f4d3 c5c3 d3c5 b7b5',
 ' g7g6 d3d1 e7e5 b1a1 e8f7 c3c4 f7f6 f1e2 h8h7',
 ' d7e8 e7f8 e8f7 e2d1 f7f4',
 ' e3f3 h7e7 e2e3 e7e5 g1f1 d7c6 e3e4',
 ' d5c7 g1h3 b8c8 d2e1 e7d8 h2f1 c7a6 f1g3 h7h8',
 ' c7d8 f4h3 d5e4 b7b8 g4h3 g2g3 f8e7',
 ' a2b2 c5b4 d1f1 d7d6 f1e1 d8e8',
 ' c4b4 b3f3 b4b2 f3f4 b2b5 a7a8',
 ' d7e7 a8a7 c8a6 h8g7 a6c8 g7h6 c8d7 g1h3 h4f2',
 ' d6f4 g2f2 a8a7 d2d3 e8e7 d1b3 e7f8',
 ' d4f3 c8d6 b3e3 h7h6 g1e1 b6c7',
 ' h7g6 e8f8 g6f7 d6d5 f7g6 h8h7 g6f5',
 ' h4c4 a2c4 a3b3 a7b8 a8a3 e2f1 e7g6 b8b6 b3b6',
 ' b4b3 e1d1 a2b2 g2d5 f6e5 d5g2 d6e6 c4e6',
 ' f2d3 b5b4 d3f4 g7f8 g5f6 a4a3 d5e4',
 ' h5e8 b8b4 h6f8 b4b8 f8g7',
 ' d2d4 g8h8 h1g1 e8d8 f4e2 h6h5 c1e3 f7f6 c2b4',
 ' b1d2 c4b3 d2c4 b7c8 b8b4 c6c5 b4b3',
 ' h1g1 c2c1 e5g4 a6e6 f1e2',
 ' e4e5 b7g7 c5a3 g7b7 g4g5 b7d7 a3a2 f8g7',
 ' d7e5 d4e5 a5a4 d3d2 g2h3 d5d6 f7g7',
 ' c4d3 b8a7 e7e6 c5d3 g7g6 h2h3 f7g7 c1d2 g7f8',
 ' d3d4 f5f4 f1d3 e5e4 d3e2 e7f7 e2c4 c1b3',
 ' f3g4 b4a5 c7c6 f2f4 e8c8',
 ' h5b5 d1d2 b5a5 h4h5 a5d5 d2e2',
 ' c6b6 a1c3 b8a7 c3a1 b7f3 e8a8',
 ' f3a3 c4c3 g2h3 h6g4 a3a2 a1b1 a2a5 b1b3',
 ' b1c3 c6c5 d7h3 c5f5 c3a2 f5b5 a2b4',
 ' c7c6 g1e2 a8e8 g2f1 g8g3 e2f4 e8e7 b1a2',
 ' g7g6 h1e1 g6h7 c1e3 g4g3 a4b6 h7h6 a3a4',
 ' a3c2 a5b6 g3e5 g1h1 e5d6',
 ' f2b2 g8g7 g3h5 g7h8 b2e2 h8g8 e1f1 c6d8 a2a4',
 ' h8b8 c7c8 d2e3 a6b7 f1g2 c8c6 e3f4',
 ' h1g1 g4f3 g1g2 e7e6 b1d2 a8c8 d2b1 d8d6 h3f4',
 ' b5b4 e2e3 c3e5 h3f1 c8b7 g5h6 a8a5 h1g1',
 ' d1e1 h6g6 c1b2 e7e5 e1e2 d4c3 e2e1 c8b7',
 ' f1e3 c4c5 e3f5 d3f5 g4g3 h6e3 e8f8 g1b1',
 ' h5g7 c8h8 b2c1 h8e8 f3f4 e5d5 c2d1',
 ' g2g4 h6h7 c1b2 b8b7 e4c6 h7h6 f3d1 b7b8 b2e5',
 ' g4h3 g5f6 h3h2 d1e1 d5d4 e1g1',
 ' b7b8 a2a3 f6h5 h3h4 g8f8 g1h3 e8f6 g7g8',
 ' g6g7 d8a8 g7h8 g8f8 b2c2 a8b8',
 ' h4g3 f6f5 g6f6 d8e8 d1d3',
 ' d4d6 e7d6 h2h3 c7b7 e6g5 h8h7 g5e6',
 ' d2c1 e5d4 h4h5 c8b7 h5h6 d4e5 c1f4 a1a2',
 ' e8b5 f4f3 a2b2 c1c7 b2a1 c7c5 a1b2',
 ' d4d3 e3f4 b5c4 c5a7 c7f7 a7b8 e8e7',
 ' b1d2 h8h7 b3a2 b6b5 a1d1 h7g7 e2e4',
 ' f2e2 e1h4 e2f1 g8h7 d8b8 b3c2 e3b3',
 ' f2f3 c1h6 f8c5 h1g1 f3e4 c2c3',
 ' d8c8 g4f3 c2e4 e2e4 f6e7 f3g2 d5e4 f4g6 e7f6',
 ' b3g3 g6f7 e2e3 b4d6 g3h4 c6a7',
 ' c3c2 f6e6 e2c1 h4f4 b2d4 g5h3',
 ' c4a2 c7c6 h3f2 d7e8 d2e1 a7a6 b2b3 h7f8 c2e2',
 ' g5h3 b6c6 a1b1 g8e7 a2a3 c6c5',
 ' a2b3 d1c1 h6h8 f3g5 e6d7 f2f8 c8a8 h1f1 b7d5',
 ' b1c3 e7e6 f2g2 f7f5 a2a1 g8f6 g2h2 f6d5',
 ' d2f3 h5h3 f3g1 d3d4 f1g2 h6g8 a1b2',
 ' h5h6 b2a1 e2h5 e8e7 h3e3 a5a6',
 ' c4b3 c2a1 f7e8 d2d4 f6f5 b4c5 a7a6',
 ' c8f8 c3c6 g5d8 c6c5 d8c7',
 ' f3d2 e7b4 e2f1 h6g5 d2e4',
 ' d7d8 d1e1 h8h7 a2a4 c8e6 a1a3 f6d7',
 ' d5d4 c3d4 f6g8 e2f2 f7f5',
 ' a5b7 a1b2 c5d7 e2f2 c8d8 b2c1 h7g6 f2f4',
 ' d7d6 h4g5 d6d4 g3g4 h5g4 f3e3 f8f7 g2g4 d4g4',
 ' g7g8 a4a2 d4e3 c2d3 e3d4 d3b1 d4g1',
 ' g3a3 a2b1 d2e1 b1a2 h1f1 f6f5',
 ' g2g5 b5b4 f6h8 a5b6 h8e5 c2a4 a6b7',
 ' h6f7 h3h4 h8h6 f3d5 d8d7 d5c6',
 ' h1g1 e5e4 h2h3 f3e3 g1h1 e7f5 b3b5 e3f2 a1b2',
 ' a8c6 d7d6 b3a1 c4e4 g3g4 d2b2 d3d4',
 ' h1b1 e2d2 b1f1 c3b1 c7c6',
 ' b8d6 e8d8 h3g4 g8g7 a7b8',
 ' f8g8 e6d4 c3c2 f4g6 h7e7 d4b3 a6b7',
 ' e6e5 d1c1 d6b8 c4d5 e5d5',
 ' d2e1 b5b4 g1e3 c8f5 a3a4 h6h5',
 ' g4e3 d1b3 d8d2 a2c2 g7f7 e5d5 d2c2 d5d7 e3g2',
 ' g5f4 b5f5 f8e8 e1d1 e4e3',
 ' c2d1 f2h2 b6a6 b5c5 d1h5',
 ' e8d6 d2g5 a7a5 e2d1 d6e8 g5h6',
 ' a2a4 c8a8 g2g4 a8e8 a4a1 c5a7',
 ' f6g6 e3e5 f7b7 e5e3 g6f6 f2f3 f6e7',
 ' f7g8 e1d1 a7a6 e2e3 a6a7 b3b4 a8g2 c1a3 c7c5',
 ' g1e2 a5b6 h3h4 d2f3 b3d3 b6c5 f6f7 d5d4 d3d1',
 ' f7h5 c2b2 g7f6 e6g5 f6e7 a2a3 g8f6 c1e3',
 ' g5h3 g6h7 c7c6 f5h3 c6c7 e6f7 h1d5',
 ' f1e2 c3d4 h6f4 g8h8 h1g1 e3c4',
 ' b7b5 c3d5 f4g2 e1d1 b8e5 d5c7 c5d4 a1b1 e5g3',
 ' d2f1 f8e7 f1e3 d7e6 c2b1 e6d7 g2h3 d7c6 b1a2',
 ' b6a6 g1e1 a6h6 g2h4 a1d4',
 ' c3d2 h4h5 c5b3 e2g1 e4e1',
 ' d2f3 b5c6 g2h1 c6f3 a3c3 f3g4 c3a3',
 ' b4c3 f7f5 h5h6 a7a5 c3b4 d3c5 f3d2',
 ' b2d4 c6d5 f2e4 f5g6 h5g4 g6h5 g4g3',
 ' c5e3 f3g4 e3c5 e2e7 c7b8 e7e1 g7e8 g4e2',
 ' b4d4 g3g5 b6a5 h5h7 d4d6',
 ' f7g7 h1h3 d8e8 e2c4 e8f7',
 ' e2b2 d8c7 c6b5 g5g2 a1b3 a4a3 b5c4 a8b8 b3a5',
 ' e2d3 b6b5 h5g6 g8g7 b2e5',
 ' c5f2 h5f5 b5a6 d3d4 a7b7 f4h2',
 ' b8d8 d7d8 h2h1 b2d3 g2b7 d3c5 h3f3 f2g3 f6g7',
 ' h2h1 c7b7 c2c3 d7d6 c3f6 a8a7',
 ' g6e8 h5f5 g4f3 f5f6 a8a7 f6h6 a7b7 h6e6 f3e4',
 ' f8d6 g4g6 b8c6 f2g3 d6c7 g6g5 d8c8',
 ' e6g4 g1g2 g4h5 h3e6 c6d4 e6f7',
 ' d2b1 e3f1 f6g4 f1g3 f4f5 g7g5',
 ' d7d6 e2f4 f5h5 e1d1 d4a4 h3h4 e5f4',
 ' e8d8 g3h4 h8h5 e1e2 d5e4 c1b1',
 ' g2g3 a6c6 g1e2 a5a4 e4e5 d8b6 h1h2',
 ' c1b1 e4e5 b1a1 d8d7 f3g1 e5g5',
 ' e8e7 h1g1 h7f8 g1f2 e7f6 f2e3',
 ' b1c3 e7d6 g5f7 f8g7 c2b1 d7b5 c4b5 d6a3 a1a3',
 ' b1b2 f4e4 b2h2 e4e3 h7h8 g8f8 h2c2 f8e8 d7c7',
 ' d8b8 e2d1 d5d4 g5g6 c7c8',
 ' h8d8 f1a1 a3b4 c6h1 d8g8',
 ' f5f4 d3f5 d6c6 h1c1 b6b5 f5e6 d7d6 h4h5 c8e6',
 ' h3f5 d8e7 c6c7 e7f6 f5h7 c1e1',
 ' g7f6 b3b1 d4d3 b1b8 c6b8',
 ' f6g5 f1d1 d7c6 d1e1 b8d7 c2c4 d7f8 a3b5 g8h7',
 ' c4b4 e2f3 b4b6 d7c8 b6b7',
 ' b2b1 d7c6 f1g2 a6a5 c4c5 c6f3 c5c6 a5b4 e5d4',
 ' g5f3 e1d1 h3h5 c1g5 h5h1 f2d3 h7h8 c4b5 a8a7',
 ' a2a4 g3f3 f4e4 a6c8 d7c8 f3c3 c8b7',
 ' b3b4 g4g3 e4d4 g7g6 b1f1',
 ' d3c2 b5c4 a3a2 d2g5 a2a3',
 ' d7e5 b1a3 e5c6 d1c2 a6a5 c2d1',
 ' d7e6 b1d2 e6f7 g1e2 f7g6 a5a4 f5e6 h1h2 b7b6',
 ' h3g3 g1h1 g3b8 a6b7 g6f5',
 ' f6h4 d7g4 b1a1 g4h5 a1e1 h5g4',
 ' f7f6 d3b1 a8a7 g5g6 g3g6 f2g4 f6g7 g4e3 b2c3',
 ' e7e5 b5d6 e8e7 b2e5 c7c5 e5c3 d8e8',
 ' h8h7 d1c2 g8h6 g1h1 d7d6',
 ' d2d1 e8f8 c2c3 h6h8 c3c4 f2d4',
 ' f2f1 c7g7 b7b8 g8f7 e5d4 g6g5 d4c3',
 ' g2f1 g8f8 b2c1 d7b6 b1a1',
 ' a8a6 d1c1 b8d7 h1g1 b6c7',
 ' d8h4 c1d2 d7d6 e2e3 h4h5 d5c6 d6c5',
 ' b1c3 e5e4 h6f8 e4f3 e2f1 e8d7 d3d4',
 ' d7f7 g7d4 f1d1 g8f7 f3e5 f7g7 g2g3',
 ' g2g4 g7g5 h2f4 c7c6 f4d6 c8c7 e2c4',
 ' d8d7 e3f4 c6a5 f4g3 c5g1',
 ' b2b3 d8d7 b1a3 b5b4 a1b1 d7a4 f1g2 e7e5 g8g4',
 ' f7g7 a3b1 f6f5 b2c1 g2h3 f1g2 b7b1',
 ' a8e8 h2h3 f7g7 c1d2 g7h6 e3e4 b7d5 e4e5',
 ' d8c8 c1b1 c6b5 e5c4 c8d8 b1a1 d8b8',
 ' h2h3 c7c5 b3f3 f7d7 f3d3 h7g7 h3g4 g7f8 d3g3',
 ' a6a7 b8a7 h5g3 c1e2 g3e2',
 ' a7a6 b2b4 d7e8 g5g6 d5b4 e1h4 a6a5',
 ' g2f2 f8e7 h2g2 e7f8 f2f3 f8e7 a6c6',
 ' g1h3 d8c7 c1a3 e8d8 c2d1 d7d5 e1f1g1h1 c4d3',
 ' b2d2 e4d3 h1g1 h8h7 d2e2 c4c5',
 ' e7c5 g3g4 c8e6 c3c2 g8e8 h1f1',
 ' b7b5 e1d1 e8e7 d1c2 d7d6 f4g5',
 ' h1g2 f6g5 g2h3 g5f4 c1b2',
 ' c5d3 e6c4 d3b2 f2f1 h6b6 f7f8 b6g6 c8c7 b3c2',
 ' d1h1 a3b1 a4a2 e5e6 e7g5 g2f2 c3a4 d2e1 a4b6',
 ' a1a2 d7d6 f6g5 h7f7 a2f2 a3c5',
 ' f3f6 e5f6 f2f4 d8e8 a1b1 b6b5 d1c2',
 ' c3a3 e2d2 a8b8 d3e1 a3g3 b1a1',
 ' f5g6 h2h1 g4g3 g2f3 h7g7 e2f1 a7b7 d6e7',
 ' e3d3 b5b1 d3e3 b1b4 e3e2',
 ' c6c7 f1f2 e5f4 a4a5 b6c5 g2g4 c5d4',
 ' a2b3 h7h6 c1e3 h8d8 c7e7 d8c8',
 ' b4a5 g8e7 h1g2 c7b7 h4h5 d8a8 h3h4 h8h6 h2h3',
 ' b7e4 e1d2 d4c3 b4c3 e6f7',
 ' b3c4 a7b7 c4b3 a1a8 h3h1 c5d4 h1h4',
 ' f8f6 h3f3 c4e2 d1e1 f6f5 e4e2',
 ' g4h3 c1d2 b5a4 h1f1 g8e7 a1a3 f4g3 c2e1',
 ' f4f5 g4g3 e2g1 h6e3 f1b1',
 ' d4f3 e4d5 c7c5 b7a5 g7g4 h4h2 f3d4 c4c1',
 ' b1b3 g6g5 f1f2 f8e7 f7g5 e4d3',
 ' h2g4 b1b6 h5g6 a2f2 a6a8 b6b3',
 ' d6d5 d3c2 b6b5 c2d1 e8d8 f2f3 f5g4',
 ' a8a7 f4c1 e8f8 e1d1 d4f5',
 ' d3c4 e7e1 f2g4 h1d5 c4c5 d5f7 f4c7 f7d5',
 ' e7e6 d1e1 h8h6 a2a1 f3d4',
 ' c7c5 f5f4 f8e7 f4f3 b8b7',
 ' f2f4 b6b5 h1g2 g5h4 e4e5',
 ' f5f6 c6c5 d2f1 b6d5 b5b6',
 ' f5f6 d6e5 f1f2 e5b2 d1e1',
 ' d5b3 d8e8 h8f6 c7g7 b3d5 d4b3 d2c1',
 ' f7h5 f8g7 d4e5 c5d6 f6f1 d6a6',
 ' b5b6 c8e6 f4f5 g6f7 g2h4',
 ' d8e8 c4e6 a6c8 d4e5 d6e5 e6c4 b8c6 h5g6',
 ' e2c4 h8h7 d1b1 e6e8 g1e2',
 ' g6f8 f7e8 e3e4 g8h6 g1e1 c6c5 e1h1 h6f5',
 ' a2c1 b8c8 g2d2 e7d6 g1h3 c8c7',
 ' f7e7 a2b1 f5g4 e3g5 g4h3 e5e6 d6b5',
 ' b5a4 h8b2 g8f7 b2h8 e4e3 h8c3',
 ' b8f8 f6f1 f8g8 f1f6 d6d5 g1f1 a6a5',
 ' e2e3 e6e5 c1d1 a7a6 f4g5',
 ' c8d7 h4f3 c7e6 f3g1 e6f4 d2e1',
 ' h7h6 f6h7 a5a7 e2c4 c6b6',
 ' g4e2 e1f2 h4h5 b4c2 e2d3 c2a1 a8b8 f2e2 h5h6',
 ' f3h4 e3d1 g3g4 c2a3 d5c6 a7a5 c6b5',
 ' a7a2 g1h1 a2g2 h1g2 c7d6 g2f2 d6e6 f2g1 b3b2',
 ' a4c3 h6h7 h5f5 f1g2 c3a4 h7g8',
 ' g5g1 c4b6 c5f8 c8b7 f8a3 c6c2',
 ' b4b5 h8h6 g3c7 d8c8 c7a5',
 ' e2f1 f4g5 c4b3 f7d5 b3a2 d5b7',
 ' f2g3 g4e2 f8d6 d7d6 g3h2 g5h4 b5b6',
 ' b1e4 b2a1 b7b6 h6h8 e4h7 d2e2 b6a5 e2d1',
 ' g4h4 e4d5 b7a8 g2f1 c5d6 d5d1 a8d5 h1h2',
 ' e8e7 a2c2 f2h3 d2c1 e5e4 f4f5 g6g5',
 ' c1d2 f8e7 a3a4 e7f8 h2h3 g8g3',
 ' h6f7 b3h3 g5h5 a1e1 d2e1 a6b7',
 ' g4e3 f4g4 b6b8 a8b8 e3c2 b8c7 e1f2',
 ' b3f3 b5b6 f3f7 f2f5 a1c3',
 ' g1g2 a5a6 e7g8 h6g7 d2c2 a6a8 g2d2 a8a7 c2b2',
 ' d7d8 d5d6 b8a8 f1c4 d8e8',
 ' d8c8 a1c1 d3f5 d2b3 h8g8 e2e4 g6g5',
 ' h4d4 e6e5 d3c5 h6h5 d4c4',
 ' g2f2 c2e4 b4a5 e4c6 f2e2 c6g2 c7h2',
 ' f1e1 f3f1 e1d2 h8h5 g6a6 f1d3 d2c1 h5h7 a6a4',
 ' c4d5 c8d8 d5c4 e3d4 c1d2',
 ' e7e6 e4e5 d7b8 c3d5 a7d7 d5c3 g4h5 a4b5 d7c7',
 ' a5a8 f4f6 g8e6 f6f8 c8b7',
 ' f2e1 f5h4 f1h3 b2e2 e1e2 d7a4 e2e1 h4f5 d5d6',
 ' h3g5 a2c3 h1c1 b6c7 c1d1 f7f5 g4f5 c3d1 f2g3',
 ' d2b1 h6h4 f2f4 b7h7 c2a1 d6d7 h3f1',
 ' e1f1 d7d6 b1c3 e8d8 a1c1 d8c7 c1b1 d4c5 e5d6',
 ' h1g1 c2b3 g5e3 e6d5 e3f2 f8d6 g1f1',
 ' b6d5 e4d5 d7e6 d5b7 g4h4 b7c6 e8f8 c6f3 f8e8',
 ' e8f8 c4c5 e5e4 f2f4 d4c3',
 ' d6c7 g4g7 c7b6 a1h1 h7h2 h1e1 h2h8 e1a1 h8h5',
 ' e1c3 f1f8 h4h5 d4c3 c2c1 g7h6 c1e1',
 ' e2e1 d7d8 e1e2 a8c8 g1h3 d8g5 d3d1 h7h6 d1d2',
 ' c7d6 d1e2 d6b6 e2d1 b6c6 b2b4 c5c4 h1f1',
 ' f5h3 d8d1 a3a6 d1h1 a6a8 h1g1 h3d7',
 ' f6f4 g3e2 f4f6 g2g3 a8b8 b4c4 e6e7',
 ' d5d4 a3f8 g4g5 f5f6 h6h5 b7d8 c8g4 e3d4',
 ' b1e1 a6a8 f4d2 d5c6 e1f1 a2b4 f1f4',
 ' d8a8 f2g1 h8h7 g1f2 a8e4 a5c5 e4f4 f2g2',
 ' d4d3 g2h3 a8a7 e2c2 a7b8 e6f7 b8a8 c2c5',
 ' f7f6 f4f5 e7b7 b1a2 d8a8 d2c1 h5h4 g3e2',
 ' h6f5 d1b1 f5h6 d7d8 h6f5',
 ' d1c2 e6a6 h2f4 a2b4 c2d1 e7g8 d1d2',
 ' h8d8 e2f2 a1a3 b5b6 a3b4 h1h5 d6d7 h5b5 b4d2',
 ' d1c1 f8g7 c3d5 a6a8 c1b1',
 ' d8c8 f2f4 b8b6 f4f5 h8h6',
 ' e1f2 c3b2 d7e5 e7a7 c6a7 e4h1 a7b5 c4e3',
 ' a1h1 d7c5 f6e6 g8f8 h8h7 f4c7 e6f7',
 ' g8f8 d3f3 d6e6 f3b3 d8c7 g1f3 c7d8 f3e5',
 ' e4e5 c3a1 a3b4 a5b4 h7g5 a8c8 e3d3 e7g6 h1h2',
 ' g5f6 a6a4 d7a7 b8a6 a7f7 e6e8',
 ' d3f1 f6f5 a3b3 e4e3 b3d3 e7b7 d3e3',
 ' f7f6 h1g1 g4f3 d4d3 f5g5 g3g4 c5d7 d3b3 a6a8',
 ' c5d7 d1b2 e5d4 c6d7 d4g1',
 ' c8f5 c7c6 e3e4 d8e8 f4g5 b3d4 g5g6 d4f3 e1f1',
 ' e5g4 h2h1 b3d3 d1c1 d3c3 c4c3 c7d6',
 ' e2d1 b7b6 f3h2 g5g6 a1a6 g6g4 f1e2 f6e5 e2g4',
 ' d2e4 c8d8 b2b6 d8a8 e4d6',
 ' e1d1 g1f3 d1d2 b1b6 d2d8 g8g7 d8c8 f7e8',
 ' e4e3 d2b3 d4d5 g7d7 f5d7 h6f8 c7d8 b5a6',
 ' h3g3 g7a7 g5h6 a7d7 g3g2',
 ' d8e8 d2e3 g6g5 a2a3 c7c5 g1h3 e8a8 e2d1',
 ' h1h2 b7g2 b5f1 g2h3 c5c6',
 ' f1a6 f8e8 g1d1 e6f5 d1d3 f5e4 a6c8 e4c6',
 ' f4e5 f1h1 a6a5 d3d4 a8a6 b4a5',
 ' h8e8 a6b5 d7d8 b4e7 d8c8 a2a3 d4b5 d3d4 e8d8',
 ' d8b6 c2e3 e8f7 e3f1 b6d4 b3d1 d4b2 d2d3',
 ' a8d8 c6c3 d8d6 g7g6 a2a3 e5f4 g4f5 g6f7 d6e6',
 ' f1g1 e3e4 g1g2 e2c2 d1e2',
 ' e5e4 c6e4 d7d8 a8d8 g1a1 e4b1 f2g2 d8d3 g2f2',
 ' h3h6 g7h8 a3a5 f6e6 h6h5 c8a6 h5h7 h8e5 d2c2',
 ' b4b1 d6c7 c1c2 e5e7 c2a2 b8e8',
 ' c1f4 d6c6 e2f2 b7a8 c4d5',
 ' g4h4 e8d8 h4h6 d7g7 h1h2',
 ' f6g5 f3g5 g8e7 d2f4 b5c4 f4f7 c4d4 f7f4 c5c4',
 ' g1e2 c3b4 h8e8 e5d4 d6d8',
 ' f5f4 g6g7 c7c8 g7g8 c8e8 c3e4 g4f2 a3b4',
 ' d7c5 d2d4 e8f8 c1f4 f8g8 e2f3',
 ' e2e3 a8a7 f2f4 a7a8 b3b4 h6h5',
 ' b1c1 e3d2 d1d2 d7b6 f2e4 a3a5 g5g4 a5a4',
 ' b5b8 a8b8 e1e2 a6b7 a2a1 h7h6 f1h3 b8c8 c1e3',
 ' d6e5 g5h6 e5c7 h3h1 g8h6 e4f6 f4e3',
 ' b4a3 c6d7 d3e3 d5c4 a3a4 c7e6',
 ' a1d1 d8b6 f2e2 c8a8 e2d3 e6b3',
 ' b2c1 f6d7 c5d4 d6b4 g2f1 c6a7 c1f4 f8h8',
 ' g5g6 b8b7 a4b6 a2h2 g3h2 e8e7',
 ' b8c7 f5c8',
 ' g4b4 b1g6 b4h4 f2g2 h4e1 a3b3 h8h6 g6h7 a6c4',
 ' c3c4 b3b2 c4c5 g7g2 c5e7',
 ' d2b3 g3c7 h5d1 c7c4 c2c4 d8d7',
 ' f1g2 b7b6 h1e1 e7c5 c1f4 c5d6 f4h6 c7c5',
 ' c8f5 e2g4 f5d3 f6f7 g8e8 e1d1 d3b1',
 ' c5c4 b1a3 e7c7 g4g5 c8a6',
 ' a8d8 f7f4 d6e7 f4f1 d8b8 b4a3 a6a5 a3a2 b8e8',
 ' h6g6 b5b6 f7g7 c6b7 f8a3',
 ' f7c7 g4g5 c7a7 g5h4 a7h7 h4g5 c2d2 b8a7',
 ' h2g2 b1e4 a2c3 e4h7 c3a2 d6f8',
 ' d4c3 a3c1 h5h4 e3e5 g8f6 e5e4 g7g8 c1a3 f8h6',
 ' e6e3 c2c5 d4e2 g7f5 d6c5 f3h5 e3f3 g1a1 f3h3',
 ' c3b5 f8g7 c2c3 f6g4 f3e5 d8f6 f2f3 g4h2',
 ' d2b2 g3e4 f2f3 e6d5 c3e4',
 ' g2g4 b7b6 f1d2 h7h5 d2b3 h8h7 b3a1 b8a8 g4f4',
 ' f7h6 h4h5 d8c8 d1c1 b7a6',
 ' b3b5 e6c4 e7d6 c5d6 a8e4 h4e1 b5g5',
 ' f2e2 h7h6 h1h2 c6b8 d1e1 b8d7 e1f2 a8b8',
 ' c2d1 a6a7 a2e2 a8d8 e7d8 a3c4 d8d5',
 ' c6e8 f3h5 e8d7 a2a3 d7e8 h3f4 h6g5 a3a2 c8e6',
 ' e2e3 f8f7 g1e2 a6a8 a5c5 f7g7 c2c3 a8b8 f3f4',
 ' g1g2 f3e2 h7h8 d4d2 g7f6',
 ' e7e8 f8h7 d7g4 d1e1 e8e7',
 ' c3a1 a3b1 a2a4 f1f3 a4d4 d2b4 f4e4 f3e4',
 ' a5a4 b3b4 d7e6 d3d4 h4g3',
 ' f4h4 b3b4 e6e5 c1d2 g7f5 h6g7',
 ' a8b7 d5d6 b2c2 h8h5 b6f2 d6b8',
 ' e7e8 c4c5 e8d8 c5b6 c3b2 c2b2 b7g7',
 ' e7f8 c1c5 f2g2 c5c1 e5e6',
 ' d4h8 h2h1 b1e4 h1h2 e4h1 d1e2 h1f3 d5f4',
 ' e7e6 h4h5 h7h6 c2d3 g7g6 d3d2 b6d6',
 ' h7c7 f1g2 c7b7 d2f1 b7g2 b1a1 d6d5 e8e1',
 ' e1d2 f6g7 f1h2 g8f6 a4d1 g7f8 c8h3 h8g8 h2f1',
 ' e1f2 g7f7 e7e8 f7g6 d6d7 a6a7 d2e1 d1e2 b6a4',
 ' f2f1 h8a8 a1c3 g4c8 d1e1',
 ' f7g7 d7e8 b2a2 f4f3 c3d3 c8f5 g1e2',
 ' a4a7 g8f7 g1b6 h8f8 b6c7 h7h5 c7d6',
 ' g3h2 b3d3 d6d7 d3d2 e6d6 d1e2 a8b6',
 ' f4f3 c2c4 h5f7 b5a3 f7g7 d3e3',
 ' c4c2 c5d4 f2g2 g7h7 c2c6 b5b4 e1d1 b4c5',
 ' d3d4 g8f6 g2h3 d6d8 e2e3 f6g8 d1a4 b8d7 c4c5',
 ' a7b6 d4d5 f5g4 c2c3 f1h2 d1d2 c6b7',
 ' d8f7 a7e7 c4d5 g4f3 f7d8',
 ' b5d3 g7h6 g5g6 a6c5 g6f7 e8f7 h1h2 c5a4',
 ' f7f8 d7d8 f8f7 e3e6 a5b6 c2c3 b7c6 e2f3 a8a7',
 ' g2f1 h7h8 a1b3 f5g4 b3a1 c8c7',
 ' h6f4 c4c5 d7c8 c3b1 h4h3 b4b5 f7f5 b1d2',
 ' e2f3 c6d4 f3e4 c3b2 b5d3 c7c5 a2b4 d4c2 g7f7',
 ' h6g5 d2e1 h4h3 d3d4 d7d5',
 ' e7e8 a1a5 e4g3 a5b5 g3f5 h6d2 h7h5 h1f1 e8d7',
 ' f5e7 g3h2 e7f5 f8h8 h6f8',
 ' f6d4 c7b8 d4h8 f8e7 f3d1',
 ' a1a3 g5g4 h4h1 g4f3 h1e1 a8b8 b3b4',
 ' f8d6 h1h3 e8e4 c5b6 d6c5 c4b3 d7f8 c2c4 d8c8',
 ' b6b5 a3a1 h6g8 d1d2 c7c5 h3f2',
 ' a7b7 g7d4 b7e4 d4h8 e4d5 h8d4',
 ' d3c4 f5f4 c4d5 h7h5 d1f1',
 ' e2d3 h6g7 d3e2 c7b5 e1f1 f7f4 a1e1',
 ' b8d7 f1g2 d7f8 c8d6 e8d8 b3b6 c5d4 d6b7 d8e7',
 ' a3a1 d8h4 f2f1 f8e8 g2g3 d7f8 h2h3 g8g7',
 ' f4e5 a8d8 d4c4 h3h4 e5f6',
 ' b5c5 d7b8 c5c4 g5e7 e4c6',
 ' c3b4 e8g7 b4c3 e5f4 e3f2 c4d5',
 ' d1a1 c8a8 g6f7 g5e3 d4e5 d8c8 f7f8 c8c7 a1a3',
 ' d7d6 h1g1 b4a6 g2f3 d6e6 c3g7 h8b8 g1g2',
 ' f4f5 c7c6 b1c3 d6g3 h2g3 f7f6 h1h2 h6h5 c4e2',
 ' a6c7 b1a3 e5e4 h3f5 c6c5 a3b1 g6f6 d2c1 e6e5',
 ' f2c5 d8c8 c5a3 e4c5 g1b1 c8d7',
 ' f1e2 d4c6 a2a1 g5h4 f6e5 a8a7 e5h2 h4d8',
 ' b7c7 e5e4 c7e7 c8e6 a3a4 h4h2',
 ' f1g1 b5b4 c2f2 c8c7 f2c2 e4e3 g7g8 c7b8 c2c1',
 ' c1b1 c5b5 b1a1 d3b4 a2c2 b5a5',
 ' f7f8 d3c4 c5b4 c2c3 f8g8',
 ' d2d3 b6a5 d3a6 h5h4 b2a1 d4f3 f2f3 e8f7 a6d3',
 ' h1g1 f7e8 a5c7 b4a3 c7c6 e8g6 c6d6 h8g7',
 ' h6g5 c3c2 g5h6 d3e2 e8e7 c2c4 f7f6 d5d8 b8d7',
 ' g5g4 c1d2 f6g5 h4f3 a5a4',
 ' b4a3 e3f4 c8b7 h2g2 h7h6 f4g3 a3e7 d1e1',
 ' f8b8 g4g3 b8e8 c4d5 e8c8 d5a2 d3f2 a2c2 f2g4',
 ' e8f8 f4f3 f7f6 b1d2 h6g4 d2b3',
 ' d7b8 d3f4 f8f7 c1e3 g8e8 e5e6',
 ' c4e5 f6g7 e5g4 f2e2 d5d3 g7d4 e7e5',
 ' d5c3 d7d6 d1d2 d8d7 c3e4 f6g5',
 ' b1c3 a5c3 b2c3 e7g8 e5e6 a6b8',
 ' e1d1 e3f3 d1e2 a8a7 h8c3',
 ' a2a3 d7d5 b2c1 d5d8 g1e2 d8f8 e2g1',
 ' a4a1 g5g4 h4f2 c5d4 f2e3',
 ' h3h2 b8d8 e7f7 d1b2 h2h1 f1e2 h1h2 f4e3',
 ' g3h3 a6a5 b5b6 a5b4 c1a3',
 ' g5h3 e3e4 c1f4 e4e6 h3f2',
 ' h6g5 e2d4 a8a7 d4e2 d7e8 g2f3 h7h6 h4h5 f5f4',
 ' d4b6 g8f7 f2f3 a4b5 b6d4',
 ' e2e3 e7c6 a2a4 h6h5 c1a3 c6a7 h4h5 e4d3 h5e5',
 ' a4a5 a7c7 h6c6 g8e7 e3e4 e8f8 a5a6 f3f2',
 ' g3h4 e7e5 d3b3 g6g7 h2h3 g7f8 b3b5',
 ' d3e3 g8f6 e3e2 a5c5 c4a5 b4b2',
 ' f8g8 c2d3 g7f6 a2a3 g8g5',
 ' g6h8 b3b4 f8g8 a1b2 b5b6 f7g5 d6f8 h3h4',
 ' g3c3 e6g4 b2a3 h3f3 c3f3 e7e6',
 ' g4g3 f8e7 f6e6 b4b2 e6d5 e7f8',
 ' g4h2 a3b4 b7e4 c3f6 d7b7 e1d2',
 ' h1e1 a8d8 g3g4 d8e8 a2b2',
 ' c3f6 a3c3 d1c3 d2c3 e7e6 h2h4 d7d5',
 ' g5h4 e3d1 h6g7 b2b3 d4a7 d1c3',
 ' e7h4 b3a3 e4f2 c1b2 b5b4',
 ' h5g5 f4g5 c2b1 f5e5 c8d7 e1d3 f6d5 e5f5 h8e5',
 ' e1b1 b7b5 g4d1 c7d6 g3g4 e6e3 h3h2 a3b2',
 ' c5d3 e6d6 e7d6 c6e4 b6b8 e4a8',
 ' d8e8 g4h3 e6e5 h3f5 g8f6 h1g1 h5h4',
 ' c7c6 a3b4 h7h6 c4c5 h8h7 a4b5 f7f5 c3d5 a6a7',
 ' c8f8 a3b3 f8f1 a2c2 c5b4 a1a3 c7e8 c2d3 g7f8',
 ' f2f1 g6g2 d2e3 d5e4 c3a1 c6a5 f1d1 a2g8',
 ' b7a7 e6e7 d5b4 h1g2 b4c2 c3h8 a7a2 h4f3',
 ' f2e3 c8e8 e3f2 e8d8 c3b4 a5a4 d2c4 f7e8 d1c2',
 ' d8c7 f4g5 a6a7 e1d2 e7e5 g5f6 g8f6 h1h4',
 ' f4e5 a2a7 h1h2 d7c8 h2b2 c8h3',
 ' e7a7 d3c1 a2b2 h7h5 g6h5 b6b5 d2c1 e4e3 h5f3',
 ' h4h5 f8e7 g2f1 e6f5 f3h2 c2e4 c3c4',
 ' h1h6 g6e6 c3c4 f2b6 h7g8 e6e8 h6f6',
 ' c8e8 g1f1 d7d6 b1d1 c6c5 f1g2',
 ' e3g1 g5g8 d6c6 g8f8 h7h6 d4g1 c6f6',
 ' e7e8 e2f1 e1d2 f1f7 e8c8 f7f4 c8c6',
 ' c7c5 c2c3 d8e7 f3h4 e8d8 b2b3 g5h4 a2a4',
 ' f2f3 c5e4 g2g3 c7b8 b6f2 h6h5 f3f4',
 ' f3a8 g6f8 a8d5 b4a5 d5e4 a5b6',
 ' f6g8 h4h5 a8a4 d2d4 d8d7 e2e3',
 ' d2f2 c5c7 f7d5 g4g3 c3c7 e7e8 c7c6',
 ' h3h2 a8a4 g1e2 e8d8 h2h1 a4b4 b1d1 f7f5',
 ' b8d7 a6b6 g8g6 h6h7 g6g7 h7g7 a7a8 e3c5',
 ' d4d5 f8f7 c1c3 a5c6 h3g3 c6a5 g4g5 g7g6 b6b7',
 ' b6b7 g6f4 f2f3 f7g6 d2c1 f4e6 g3e5',
 ' g5g4 c3b5 f7g8 b5c3 d4c3 c1h6 b8d6',
 ' b7c8 e5h8 c8a6 e1c1 a6b7',
 ' g2d2 b5b6 e4g6 b6b2 d2d5',
 ' a5b6 c2b2 g6e8 e5d5 b6e3 d5b5 e3d3',
 ' e8d7 b1a3 a6b8 a1a2 d7d6 d1b1 b7c6 b1c2',
 ' g3g4 e8e7 e1d3 a8b8 a2a3 f6e6 h1e1 e7d8',
 ' e2f2 h7h6 f4f5 c5a7 h4e4 h8h7 f3d1',
 ' e1d1 e7e6 f6d8 c8d8 f4c1 h6g7 c3b5 e8e7 g1h3',
 ' f6f5 h1h2 f3f2 h2g3 e4h1 c1d2 g7b2',
 ' d7c7 g3g1 d6e5 c2b3 f7e8 d3e1 h8f8 f1g2',
 ' f2f4 b5d6 d1b1 g5f4 b1f1 c8e8',
 ' d1c2 d6e6 f1g2 e6e7 a3b1 d8d7 e2e3 d7d5',
 ' g4e6 f2f1 c8a8 c1e2 a8g8 h7c7 d5d6',
 ' c8b8 c1f4 h8e5 c4a3 g4d1 a4c6 d8c6',
 ' f5g3 a1a2 a6a5 b3d1 g3h1 d1f3',
 ' h1g1 f6c3 b2b5 c3b2 d2f3 d8d5 f3g5 g3g2 g5h7',
 ' b2e5 a2c1 e3a3 c1e2 g6f5 d7e8',
 ' g3f3 e6d7 g2g4 g8f6 c3d3 c6d5 f3f4 h5h4',
 ' e5f6 c5e7 f1c1 e7c5 f4f5 c8d7 h2h1 d7c7 e2e5',
 ' b5a3 c8g4 f2d4 c6c5 d4d5 g4c8 d5d3 c5b4 b3a2',
 ' f6f5 e1d1 g1e1 d2e1 g7g5',
 ' h4h3 g7g6 d2b1 b8c6 h3h4 c6b4',
 ' e5e6 b6g1 b1e1 h6g5 b3c5 f5e4 d3c2',
 ' h1h2 b4a2 a3c2 c6b4 c2e1',
 ' b7b6 g6g4 f7g5 g4f5 f8f6 f5f1 e3c4 d2c3 f6g6',
 ' f4e3 c8c7 e4e5 g8g3 e3f4 c7d8',
 ' b4a6 a1a2 f8e8 d5d7 e8f8 d7e8 f8e8 h2h3',
 ' d5b5 c2b2 e3c5 b2b3 a7a5 d1h5 c5g1 d2c1 e8f8g8h8',
 ' f8h8 d2e2 e8d8 e2b5 f6g6 e3e4 f5e4 d1d2 g6h7',
 ' b2b3 a4a5 b3b4 f6g8 f8e7',
 ' b7b6 a3a1 b6c5 c1b1 c5a7 g2f1 h6g5 f1g2 d1f3',
 ' e8f8 d6d7 e1d1 c8b6 f8c8 d7d6',
 ' d1c2 e7f8 b3b4 h6g6 f3e2 a6a8 g2g3 e5e4 g1f3',
 ' c8g4 f6e4 g4h4 c6b5 h4f6 c7c6 f6e5 e4g5',
 ' e6d5 b6b4 c7c5 e2h5 h8h7 f4g5 e7e6 h2e2',
 ' e7e5 f1d1 b7d7 h3g2 e5e4',
 ' b7b4 a4b6 g2g3 a8b7 b4b3 b6c4 b3b2 f7g8',
 ' c7b5 c3b5 b8c7 d1e2 e8d8 f1f2 d7c6 e1d1',
 ' d5f3 g3g8 g2f2 g8g2 d2e2',
 ' c5c1 f3e4 c1d1 e4h1 f1g1 g7f8 e2g4 f6g5 b4b5',
 ' g1g3 a4a3 f6g8 e5g3 f1e2 c1f4 e2a6 a5b5 e6e7',
 ' e6f6 b5a6 f6f7 b1a3 g3h5 a6b7 h5f6',
 ' f6h5 e6f7 d5f4 f7c4 c8b8 c4d4 c5d4 d7e6 d8e8',
 ' f8c5 h2g2 a6b6 g5h6 g7g5 a7a6 a4a6 g2g3',
 ' a8b8 e3f4 g5h4 f2e2 d8c7 e2a2 c7d8 e4e5',
 ' h7h6 d3f1 d8d7 f3f6 d7e8 a5c6 c7d7 f6f4 d7d3',
 ' g5f6 b8c6 g4f4 c6d8 f4g4 g6g5',
 ' g5g4 b4c5 g4f4 b3c1 f3b3 c1d3 f4f3',
 ' f8g7 d2e1 h6h5 b3b4 c8e6 a2c1 g7h6 c1d3',
 ' b4b2 a6a7 d2f1 f7g7 b2b4 b5a4 g1g2 b8c8 b4b7',
 ' e2f3 f1h2 a3a4 d7c8 f3h1 h5g4 h1e4 d8e7 e4g2',
 ' d5f7 b2b1 a6b8 f4e5 c4c3 d4c5 a7a5 e5f6',
 ' h6g7 c5c6 e7c6 d7d8 c6e5 d8b8 g7f8 e1e5',
 ' d7c6 c5d4 b6b7 b1c1 b7d7 a2a3 d7c7 f1h3 c6a8',
 ' c1e3 a7c6 b2c1 d4e3 a2c2 g6e5 g1f3',
 ' g8f7 e3b3 e2e8 g1f3 e8e4 c6e4 f6e5 f4g5',
 ' c5d4 d5b7 d4b2 b3b4 b5a3 a1c1',
 ' e5b8 b2b3 h6e6 f3g2 e8f6',
 ' b2a1 b1c3 h7g6 f1g2 g6g7 c3a2 g8f7',
 ' b7a6 c7f7 e6e5 e3d3 h7f8 c2a3 b8d8 d4e5',
 ' a3c5 c2c1 d5d4 e2e4 h7f6 h1e1 b5b4 b1c3 b8d7',
 ' b6b4 d4e3 b3a5 e5d4 d7b8',
 ' h6f7 e5e8 c8c7 g2e2 f8d6 e8h8 c7b7',
 ' f7f8 d7e8 h4h5 g5e7 d5f6 c8f5 c1c6',
 ' f4e5 f7f6 f3f4 b6c6 e7d6 b7a6 d6d3 f6f5',
 ' f4d5 b8a8 b7f7 f8f7 b5e2 a3a2',
 ' f1d3 d1c1 h7h6 c1c5 h6h8 d5d6 h8h7 b3d2 d3f1',
 ' e8c6 d1c1 b7b6 f3f4 f8g7',
 ' f2f4 c8a6 e1f1 h8h7 g1f3 f8h6 f1g1 f6f5',
 ' d8e7 f1g2 g8g7 g4f5 g5g4 c2c3',
 ' g4g3 f1g2 c8f8 g2f1 a1e5 g1e2 d7d8 a3c4 e5c3',
 ' e3e2 d6f4 h2h1 b5b7 f2f3 b7b5 f3e4 f4c7',
 ' h6h5 a5b6 f8h6 e3f2 b5c5 b4c5',
 ' c6b7 d7d5 e3a7 e7e3 a7e3 f8g7 e3a7',
 ' h1g1 c8b8 g1c1 b7a8 e2f3 b1d2 f3e2 f7d8',
 ' f1b5 f5e6 b5a6 d7b6 g2g5 e6d7 g5e7 d7e7',
 ' b5a7 e7e5 c2c4 a6b8 h1h3 d7d6 f1g2 b7c8 g2c6',
 ' h1f1 f6c6 e1c2 f4f5 c2a1',
 ' h7g7 b1a3 b7c8 d3d8 c8b7',
 ' g5g6 h5g5 a8a5 d4e4 d2c3',
 ' d1e1 f6d5 a1a3 d5b6 d8e6 a4c5 f4f5 a7a6',
 ' d3e4 c8f8 h5h6 b3c3 g2f2 f8g8 b4b5 g8a8',
 ' f8b4 e1e2 f6h5 c4d5 g6g5 g4h4 e5e4 h4g4 h5f4',
 ' f7h6 a2a3 e4f5 b1d2 f5e6',
 ' f8h6 h7h6 c6e8 g1h1 e8b5 d4c3 b5c4 a7c6 a1a8',
 ' h4e1 b1d3 h5h4 c4c5 b7e4 d3a6',
 ' b4b5 a7a8 b2a1 d3c4 a1b2 e3e2',
 ' b4b6 a4b4 b6b4 g3g4 b4b6 f2f3 b6a5 g5h6 a5b4',
 ' b4c3 g6g4 c2d1 g4g3 b3b4 f2g4 h2h3',
 ' e3g4 g1b1 b2a3 c4c7 d5d6',
 ' h8e8 e5f6 a8d8 e2f4 d8c8',
 ' h7b7 e1g1 a3a8 g1c1 g5e3 c2d3 b7b3',
 ' g4h4 e7g6 h4g4 c7b6 c6b5',
 ' e8f8 h3g3 g8e7 d2b3 b8a6',
 ' e5g7 h5e2 c2e2 a8a7 h3h1 c7c5 g2g4 e7d6',
 ' b8c6 h1h4 b5a4 d1a4 d6d5 h4e4 c8a6 e2d3',
 ' d1c1 d8e7 h2h1 b8a6 a3b5 g4g3 b5c3 h6g8 c1d2',
 ' b1a1 f6e5 a2d5 g7g4 d5a2 g4f4 h1e1',
 ' b3c2 e3a7 c2b1 h8d8 b4c4',
 ' e4c3 c6g6 c3e4 h8g8 a2a4',
 ' f6f7 h8c3 h1g1 d7a7 g2f2 g8h6 f2e2 c3d4 e6h6',
 ' f8g6 e2c3 a3c3 c7b7 g2b7 e7e5 g6h8 f7g8 b7d7',
 ' g3g4 c8b7 g1f3 b4c6 f3g1 e7e6 b2a3 c6a7',
 ' a6a5 d1d2 a5e5 f8d7 c6b4 c4d6 f7g6 h1h2',
 ' b2b5 d6b8 c6c5 e8d8 c5g5 b8e5 b1d3 e5f6',
 ' d5d7 c4c3 f1f4 f7f8 h3g3 c6c5 d7c7',
 ' f1d1 d5c5 d8c8 c5b5 f7e7',
 ' a8d8 e3e4 d8d4 c1b2 f6f5',
 ' d8a5 c5b5 a6b5 b2b3 a5a3',
 ' f3e2 f6f8 e2f3 d7b5 f3e2',
 ' f7d6 b2b4 d6e4 d2d5 g7g8',
 ' h7h5 g5f7 d8d7 d2d3 d7b7 e1f1g1h1 f8e7',
 ' e2d3 a7b5 h1c1 g5f4 c1f1 b5d4',
 ' h6d6 f8g7 a1c1d1e1 e5c6 a3c2 e7e6 d6e6 g8e7 e6d6',
 ' d8e7 h7g8 e4e3 b1a3 c2a4 d1a4 e7f8',
 ' c8d8 c2d3 b1b4 b6a8 g6g5 h2g4 b4g4 a8b6 g4f4',
 ' c3f3 f8c5 f6e4 d5e4 c4b6 d8e7 b6a8',
 ' g7e5 f2f3 e5g3 g2g3 h6h5 g3g1 b6b5 b1a3',
 ' b8a7 b3b1 a7g1 b1b6 h4f5 b6b4 f4e4 b4b5 e4e7',
 ' f7f6 d1b3 c7c5 e1d1 e8f7 b3h3 e7e5',
 ' g6h8 e6e2 d1c1 e2h2 d2d4',
 ' h3h4 e6h3 c2d2 h3h2 b1b3',
 ' h4h3 e2c1 d6e5 c1b3 d5d4 a2a1',
 ' d1c2 g8h6 a1b1 g6g5 f4c1',
 ' b8a7 e4e2 g5g3 d7e7 g3h3 e2e4',
 ' b4b5 e8b5 a2a4 b2c2 f1g1 c2c1',
 ' f3f4 c8h3 e2d2 h3f5 g1f3 g6g4',
 ' f8d8 b1c1 b7b5 f2g1 c8b8 b3d4 b8b7',
 ' c1b2 e7e8 g1f3 d7b5 b4c4',
 ' b2d2 c1d2 c7c5 f3f4 b5b4',
 ' c3d5 h7g6 g1f1 g5h4 e1d1 c8e6',
 ' g7f7 b2a2 h4h3 a2b2 d6f8 f4f5 d7b7 b2a2 e4f5',
 ' c6c8 g2e1 g8f8 a4a5 b4c3',
 ' h2c2 b5c4 b4b5 c8a8 d1d2 d7d5 d3d4 e7e8 c2b1',
 ' h1e1 a8b8 g3h5 e3e2 d2e2',
 ' g7g6 c2c4 e7c6 h3f1 c6a5 d1c1 f8e7 e1d2 d5c4',
 ' e3d2 d4a4 h2f1 a4d4 b1a3 g5f4 d1c2 e5e4 g4h4',
 ' g6h7 f2g2 c7d7 a4b3 g7f8 d1f3 d5e4 h1h2',
 ' d2c1 h7h8 f4f5 a6b7 g1h2',
 ' g1e3 e6b6 e3e4 e8d7 b3c1 b6a6 c1b3 d8b8 b3a5',
 ' a2a1 e8e7 d2c1 h5f6 c1c5 e7f7 a1e1 c8d8',
 ' e6f5 f3c3 f5g4 c6d6 e4c5',
 ' a1b1 g7f8 b1a1 b7f3 a1a3 e5c7 d3d4',
 ' c1h6 f8g8 h6h8 g8f7 h2h7 e4h7 a6b6 f7g6',
 ' f2f3 e8f8 d3e5 f8e8 h7e7',
 ' c5c6 c8d8 h6h4 g4g6 h4f4 d6e5 d4e5 e6f5',
 ' g7e7 a1b1 e7e5 b1a1 d1e1 c1g5 e5e6',
 ' e5b5 b1a1 b8a6 f3f4 b5a4',
 ' h7g7 h1c1 d2c1 b3b4 g5h4 e8c8',
 ' c2d1 g3a3 f2g2 e7e8 d6d8 a3f3 d1d2 e8d8',
 ' f7f6 d4d5 f8c5 g2h2 f6f5 h2g2 d7d6',
 ' d8d5 f7e8 d5a5 f6f5 h1h6 b8g3 c4b6 e8e7 f2f4',
 ' c7c6 a1a2 b6c5 f1g2 d1f2 a2d2 a8a6 f3g1 a6a7',
 ' e6f5 a2b2 f7g6 d1c1 e8f7',
 ' a3b1 e4g5 b1d2 c6b8 b2c1 d7d5',
 ' c2b1 b4b3 c4c5 c6a5 h1g2 e7d5 g2f3',
 ' g5f7 h7h6 f1e2 b3d1 e2e3 d8b8 g3f3 e5f7 f3d1',
 ' b1b4 g4g5 f5e4 f2h4 c5c7 b7c7',
 ' d7c8 b2b1 a8a6 f2h1 c8c7 a4b5 h7h6 b1c1 c7b7',
 ' g1h3 f7f5 d1b1 b7b6 h4h5',
 ' d3e4 b7b6 c1f4 h6f7 f4g5 e8d7 a1d1 c7e8',
 ' e4f6 a4b3 f4f5 g7g6 f5g6 d6e7 d4e5 h5h4 g6h7',
 ' d1c2 a6b4 e2f3 f2h1 d2d3 b4a6',
 ' a8b8 f2f4 b5a3 c1a1 e6d6 f1b5 c7c6 g1g2',
 ' a3b5 c2a1 d2e3 a1c2 g8f7 c5c7 f1g2 c7c4 f7g6',
 ' d5e6 d7e8 a4a5 g6h5 e4e3 e7g6 b2c3 g6e7',
 ' g7g6 c3a5 g6c2 f4d5 h6g7 h3g4',
 ' g4g3 f2f3 e8f8 b1a1 f8e8 f1g1 c7c3',
 ' e7e6 a7g1 c8d8 d1d6 d8d7 a5a6 g4f5',
 ' g7d4 b5a6 g4f2 g1e2 g5e7 e1f1',
 ' g4g6 b7c7 f1e1 e5e4 d1d4 c7b7 e1f2',
 ' h8g8 h5f7 f6f4 h4h5 g8g6',
 ' d7d6 c3b5 d6e6 e3e2 d8e8 f3e5 e7d6 b5d6',
 ' f1g2 f4d3 h1e1 b8c7 e1e2 c7b6 e2e3',
 ' g1h2 f4g3 a1a2 b3e6 f1h3 b7b8 e1d1 a7a6',
 ' a3b1 f8f6 g4e5 c4b3 a1a2 b3b2',
 ' a2a3 f5g4 a1a2 e7e5 d3d4',
 ' g1f1 f2d3 d5f5 c7c4 b7a5 d3e1 a5b7 h3h2',
 ' e3d1 a7a6 d1e3 a4d1 e3f1 c5e4 f7f3 a6a4 h4g4',
 ' d6e7 a6c5 d3c4 f8e7 d2b1 c5d3 g4c8 e7d8 g5e4',
 ' d6b4 g7g8 f1f2 f6g5 b4c3 e4d3 f2g2 e8d8',
 ' f5h6 f2d1 d8c7 c4b6 c7a7 d2d3',
 ' c4b5 c6b5 g5f6 b5c6 c1b2 c6d5 h4g4',
 ' a3b4 d4d6 h4c4 a2a1 c4g4 d6d8 e8d8 g5h6 b4a5',
 ' a8a5 c5c6 e7c5 a3b2 c4a6 b2d4 a6d3 d4e5 a4b3',
 ' c8f5 g5g4 b8g8 e1g3 f5c8 e5h8',
 ' e3d2 b6c5 f1f3 a7a5 e4d5 c5d6',
 ' b1a3 f6g5 h4g5 d7d4 g5h6 g6g5 f2f3 b8c6 h1h3',
 ' h3e3 d3e3 c7b8 a8b7 f8h6 h2h3 b3c2 f2h4',
 ' d4c2 c6d8 c2b4 f7f6 d2f3 f6g6',
 ' c7d8 e7f8 a2a4 c3b4 c4b5 b6a8 h1h3 b4c3',
 ' e7d8 f2g2 c8b7 c2g6 h5h2 g2g1 c5c4 g6f6',
 ' f4e6 c3a2 a8a7 d2c1 e8f8',
 ' b7a5 f1h3 g4g2 e6c6 a5b7 f2f3 b7d6',
 ' h1h3 f5f4 f1g2 c6c5 c4d5 f4e3',
 ' e2d3 c2d3 a8c8 g5f6 b7b4 f6g7',
 ' b4b3 b7b8 g8g7 b8b6 h7h6 a2b1 b2a3 g1e2',
 ' e3e2 h7g7 e2f2 h5e8 h3g2 h6h5 c1g5 e8f7 g5e3',
 ' g1f3 f8h6 e1f1 e7g8 d2a5 d8g5 h1g1',
 ' a6d6 c1c6 e3g4 c6c5 h8g8 f3f4 d6b6 b8d6',
 ' a2b1 e7e8 d3d4 e4h1 d1g1',
 ' f2d1 d2c3 b6a5 d8d7 c7c8',
 ' c2a3 e6g7 a3b1 d2e2 b1d2 e1f3 d2f3 c1a3',
 ' e1f1 b8a8 f5c8 h6g5 g1e2',
 ' h1h3 d7h3 f1e1 h3f5 e4e6 f5e4 g6g7',
 ' g7h8 f8h7 a5a4 e5e6 a4a3',
 ' d3e2 d4c3 g3g4 d8b7 f1d1 c3d2',
 ' b2b4 g5g4 e1e2 c5c4 d1e1',
 ' d2d1 d7e6 c1b2 h3f1 d3c4 e6g4 h4f5 h7h5',
 ' h4g5 f6e7 a4a5 g4h6 b7c8 h6g4 a3b5 f7h6',
 ' e6f7 c2c1 e7e6 c1c2 e6e5',
 ' g5h4 g4g5 e8d8 d6d1 d8d1 f1e2',
 ' b8c7 f3a8 d4c4 b1b4 c3b4 a8h1',
 ' h4h8 c5b5 g1e2 b5c5 b2d4 c5d6 e2g1 g8f7 h8h5',
 ' a1a3 g8f6 h5f5 d4d3 g2g4 f6e4 d2c1 f7f6 f5e6',
 ' d1b2 b3c2 d3d2 c6b8 b2a4 h8f8 c1d1',
 ' f5g3 c7d8 b8d8 d3b1 g3f1',
 ' b7c6 b5b4 c6e4 b4a4 e4f5 c5d4 e3e4 a4a5 g1f3',
 ' c5e3 c2c3 e8d6 c6a4 e3d2',
 ' g3g2 c6e7 e3d2 c3c4 g5e7 c8d7 a6a5 d7c8',
 ' b7b3 h8e8 e2e3 f4g3 c3c1 e7g8 c1a1',
 ' b3b7 a2b4 b7b5 c1b2 b5b8 f7b7',
 ' d6e5 d2c3 c2b4 h1h2 e8f7 h2h1 a8d5 h1h2',
 ' d6f7 g3f2 c4b3 f2e2 b3a2 f5f6',
 ' d5d1 b1d1 b7d8 g5f3 b6c5',
 ' b8b4 c3c1 e6f7 f6e7 f7g8',
 ' b1a3 g8e7 f1f2 h8g8 c3c4',
 ' d7d6 a7b8 c8f5 c1f1 h6h7 e8c8 b2b1 f1b1 f5c8',
 ' a1a2 h8h7 c5b6 a7b6 c1a3 a8a6 a2a1 c7c6',
 ' g3f2 d3h3 b6b3 d7d6 b1d3 d5c6',
 ' a8b8 a7a8 c8b7 f1c4 f4f3 c4e2 b6c6 c2c4',
 ' g8h8 f6e6 d3d4 a5b7 b5d6 h4h3 b4b5',
 ' a3a4 e7e6 d3d1 a7b7 d1e1 b7c7',
 ' g8h6 f3g5 f8g7 e1f2 g7c3 g5f3',
 ' c7c5 d4c5 f7f8 b1a1 e5c4',
 ' h6e3 e5d6 e4f2 f3g5 b8c6 h1g1 f2e4 d6h2',
 ' b6b7 d6g3 b7c8 g3h3 g2g3 a8a4 c8f5',
 ' b5a6 f5e4 a6b7 c8a8 e1e2 a5d8 e2e1 f7g8',
 ' h1g1 g4h3 b8d7 c1h6 g1c5 h3g2 c5f2 g2h1',
 ' h7h6 c2d3 b5c4 g8c4 g4g3',
 ' a6a5 c3b5 a5a4 c1a3 d8d7 d5g2 g8f6',
 ' h6f4 g1h3 d5c3 b1g1 f4c1',
 ' b1c1 a8b8 g6g7 e5f4 b2b1 b8a8 g5h5 a6c5 c1g1',
 ' d8e7 c3c4 a7a5 b5b6 e4g3 e1d1 a5a4 c1d2 h5h4',
 ' e6e5 f3e1 f7c4 f1c4 d7d5',
 ' c7c4 e3f3 c4c6 a1e1 e4f6 f1h1 c6c2 e2e3',
 ' d7h3 g1f3 b8d7 h1d1 b2b6 e5b8 h3g2 d1g1 b6h6',
 ' f6e6 d2c2 h8b8 d4d5 e6e5 c4c5 e5d4 c2c1 b8h8',
 ' h4h3 e2f1 d4d3 d2c3 e7f7 g4e6 g7e6 h6h7 g6g5',
 ' b8a6 c7d6 e6h6 d6b6 a6b4',
 ' e4f3 a7e7 e8e7 d3c2 e7d8 c2e4',
 ' e1e2 b8a6 b1b2 d6f7 b2c1 d7d6 g2g4',
 ' d6d5 e3e4 b3b4 e4d5 b4e4 h1g2',
 ' c1a3 e1d1 e8e7 g5h7 e7e8 h7f6',
 ' h1g1 c8c6 g1e1 c6d7 e1d1 d7e8 d2c3',
 ' e2e3 e7f6 c2b3 h6g6 e3f3',
 ' e7e5 f4e5 d8a5 h4h5 g5g4 d1e1',
 ' e7e4 c4e3 b8c6 g2g1 c6a7 e3d1 h6h5 f4f5 e4e7',
 ' f6d5 a1a2 d8a5 a2a4 e5d6 e4g6',
 ' g7e5 b1b2 b4a2 g5g6 e8e7 b2c2 f5g4 g6e8 e7e8',
 ' a4a6 d4d3 c2c1 d5c4 e2d3 c4d5 d3b3',
 ' d3d4 b7c6 g1e2 d7c5 e2f4 e8e7 h3h4',
 ' f6d8 d2d1 f4d3 d1e2 d3b2 c3d1 f2f1 e2f1',
 ' g4e6 h8e8 a1b2 d4d3 b2b5 g7f6 f1g1 h4g4',
 ' f4f3 d2c4 a3f8 a4a5 c6d7 a1a2',
 ' b7a6 g5d5 b4c4 e2d1 a6b7 g1g3',
 ' d8e8 a3b5 g6g5 e2e3 c3c2 g1d1 b8c6',
 ' f7e6 d3e2 f8e7 b2e5 e7e8 a4b5',
 ' h7h6 g2f3 h6h5 f5g5 e8c8 f3g2 e7e6',
 ' h8d8 f6f5 a6b6 e2c1 c6b8 f5f4 b6g6 c1b3',
 ' a4a5 d5c4 g7g6 c5e6 d3d4',
 ' g5f4 b1g6 d5f6 d1d4 b5a4 g6h7',
 ' h1h2 h4f6 c4b6 a7a6 b6a8',
 ' a6b7 d6d5 b7c6 a4c6 d1d2',
 ' h3g3 c6b5 e2b2 b5a4 g3e3 e4c3 d1c2 e8g8',
 ' f2g3 g6c6 f1h3 c6c8 c5b6 h8f6 e5e6',
 ' d8c8 c1b1 c8a8 b1b2 h6f8',
 ' b2a1 a4b3 g8f8 d7f6 a1c3 b3c4 c3d4 c4d3',
 ' a2d2 h8d8 e5f5 d8d3 f5g5 g4h3 g5f5 b1c1',
 ' g7d7 a4b5 d7g7 c8e6 b6d4 b1d1 d4a1 b5b6 g7b7',
 ' f7e7 b1a1 e7d7 e2e4 f8h6 c1b1 b8a8 f1c4',
 ' d1d2 b3a3 e2f1 f5f4 f1g2',
 ' b7f3 e7e4 b1d1 e4c2 e1f2 e3f3 d1h1',
 ' e7d5 f8e8 b5b6 h7h8 c2c4 h8g7',
 ' b1a1 f5g6 b3a3 b4a6 a1c1 e5c7 a2e2 c7c6',
 ' f1g2 d6a3 c1e1 a3b3 a1a3',
 ' f8h6 c3d3 e6c7 e5d5 h6g5 d5a5 c7d5',
 ' d8b7 g3g4 c8a8 c7c8 f6f7 g2h3 e7e3',
 ' b6b3 a3b3 c5d4 f4h6 g8f6 h3g2 f8a3 a1a2',
 ' d8f8 a4a6 h6g7 a6a4 g7g6 c2c3 g1f2',
 ' g2f1 a4a5 e7c7 c3b2 g6g5 b3b4 c7d7',
 ' e7e8 g4g5 g6g7 g2h1 c6c4',
 ' d6e7 e8c7 g3g8 c4c5 g8h8 c7d5 e7f8 d5b6 b4a3',
 ' f8e7 d1e1 e7c5 e1c1 e5f4 e3f2',
 ' e2d1 f7f5 e3e4 g7g5 d2b3 g8e7 h5h3 c5b4 f1e1',
 ' a2a3 c8b7 e3e2 b8a6 e2d2 c6c5',
 ' e2d4 e6e5 d5f6 g7g5 e1f1 a5b5',
 ' b8c6 b1a3 f7e8 a1e1 f1e1 a2c3 b4c3',
 ' d8b8 g3h3 d4d3 e4e8 d7c7 e8f7 c7c8 b5b6',
 ' f4e5 a3a4 h5h4 a4a5 c2c1 e2f1 e5b2 d2d3 b2g7',
 ' h3h4 f8g7 e2d4 c5d6 g2h2 d6b4 f1b5',
 ' c1d2 g2f2 f5g3 a7a6 d2e1 b7b4 e1b4 d7d6',
 ' d8g5 g6h7 c8a6 h7g7 c4c3 d4b5 a6c8 g7c3',
 ' a5a6 c8a6 a1b3 a7b7 b3a5 d7d8',
 ' d2g2 b5c5 g2b2 e7f8 b2f2 c5c4',
 ' a2a7 c8b7 a7a1 b4e4 e3d2 f5f4 d3d4',
 ' g4b4 b7a8 b4g4 a1h8 c1g5 g1g3 g4a4 f1d2',
 ' e2e3 b3a2 f8d7 g8h6 b1a3 a2b1',
 ' c8d7 c1d2 h8a1 e1g2 d7c8',
 ' c1c7 f3f2 c7c2 e8d8 c2b2',
 ' f8b4 a1a3 b4a3 f1c4 f7g6 b1a3',
 ' f3e4 e8f7 b6b5 g7a1 e4h1 a1h8 c5c8 f8b4',
 ' d6e7 d1d2 b4d5 d2c2 d4d3',
 ' d5d6 g8g5 b2a3 g5c5 d6e6 c5c3 a8b8 b1c2 b8d6',
 ' h5h4 b3d3 d8a8 g3e3 d7e8 b4c5',
 ' e6g5 e1f3 d2e3 b8b4 g2e2 d6e7 e2a2 f3e1',
 ' h7g8 f1h1 b1d3 c3e1 a4a6 b6g6 g8h7',
 ' a8b6 g3h3 c6b5 g6f4 e3c3 f3f2 c1c2',
 ' c6c7 c8a8 c7c8 a8a7 c8b7',
 ' c6c4 g3g1 h8b8 f1f2 c4c6 f2f1 b4b3 g5g6 a8a7',
 ' d7h3 d8b6 e2f3 h6d6 f3e3 b6c6',
 ' g8b3 g3e3 a6c8 e1f1 b3a3 e3e1 e5f4 f1e2 e4e3',
 ' c7c6 a3b3 d3c2 b3b1 b4b3 f2f4 c2e4',
 ' e2d4 a6d3 g4g5 c1f1 f2g2 f1a1',
 ' f2e2 d6c5 h1f2 c8a8 c2b1',
 ' c5d7 b2a3 b6c6 g7f8 c4b3',
 ' c3c2 g7f7 h2g3 b4f8 g3f4',
 ' e1d1 b6b5 a4e4 e7f6 f3f4 g7f8',
 ' d4e3 b8b6 e3e1 d8e8 g2g1 f8g7 h3g4 c1b3 e1h4',
 ' c3a1 e1a1 f8e7 a1e1 e7d7 e1e3',
 ' e8c8 c2e3 b7b5 e3g2 e5d6 c4b5 c8g8',
 ' h1g1 d4b6 c4a5 c8b7 a1b1 b6f2',
 ' a5b4 d5c4 e6d6 h3f5 h5h4 f5c8',
 ' c5d4 e5b5 a8b7 f1d1 h7f8 g2h1 f8h7 h1c6',
 ' g7h8 h5h4 a1a2 e6f7 h2h3 a6a8',
 ' g4g3 b4d3 c1b1 d3b4 f3e5 c8e6 e5g4',
 ' e6e8 h2h1 e8d8 c2a2 c7b6 h1g2',
 ' c5a3 e5c5 g8f6 c3d4 h7h8 f2c2 f6e8',
 ' g2h1 c5e6 a1a2 e6g5 f4g5 c6c5 a2a1 d6d5',
 ' f5h5 c8b8 h5c5 b8a8 g6d3 a8b8',
 ' d7h3 b7e4 e1f1 a1c3 h3g2 h2h4 a5c7 d4f5 c7d6',
 ' e5d7 b8b6 b1a3 g8h6 d7c5',
 ' e6e5 f2e1 h5h4 c8d8 e5f5 g1e2 d4a1',
 ' d3d4 f6g4 f2g3 g6f6 h3g4 e3d2 c6e5',
 ' f2e1 e4f3 c5c6 h3d7 e3e4 c7b7 e4e3 f7g7 e3e8',
 ' a8c8 h3g5 a6c7 e2d3 c1e1 a1e1 h6h8',
 ' h6h5 d2f1 f7g6 c1f4 g4h3 f4g5 f5c8 d3c2 e5e4',
 ' a8c8 e3f2 c6g6 f5e4 g6g4 g2g3',
 ' c2c4 e8d7 d8h4 c5b4 e4e5 d7c7 e2e4',
 ' f7f6 g1g2 c1a1 g2h3 d6d5 h3g2 f6e6',
 ' a1a5 g7g8 d4c6 e5d7 c6e7 h5f3',
 ' f3g1 f6f8 a1a4 c8h3 d5d6 h3d7 e1e2',
 ' a8a7 b3b4 b7f3 b1b3 f8g7 b4b5 d8b8 c2c4 b8c8',
 ' d3f3 b6d8 e2f2 d8e7 f2g2 e7a3 g2h3 h8g8 f3f4',
 ' c7c8 c5e4 h1e4 f5e4 c8c3 e6e5 b7a7',
 ' g4g5 a1e1 e8d8 c5b6 g5h6 c2e4',
 ' c1b2 g1h2 b4c5 g4g3 b2c1 f5h7 d3d8',
 ' h7h6 e4e5 c7d8 b6b5 d8b6 b5a6 a8a7',
 ' g7g6 b2b4 e8f7 g5h6 e4e3 b5a6',
 ' g4g7 f1e2 c5c4 b3c4 b8b6 h6b6 d3c5 e8f7 g7g4',
 ' d1c1 d6d5 f1a6 b4c6 f3d2 c6d8 c1c5',
 ' e2e1 c4c3 f2h2 a8e8 h2h4 g6h6',
 ' f6e7 b5b6 e7h4 h6h7 c8b7 f3f1 b7c8 h7h8 e8g8',
 ' h6f6 f7c4 d3c4 g3g4 b2b8',
 ' d4c4 f3g2 f6g5 c1g1 a7a8 a3b4 c5b4',
 ' c6a4 b2c3 f7e7 f5f6 e7e6',
 ' d8c7 g2g3 h6f7 d4e3 a7c6 e7f5 f7d8',
 ' a6b4 f5d4 d7d8 f1e2 b4a2 e2f2 d8e8 f4f5 a2c3',
 ' e8f8 e2c3 c6b5 d4e2 g5g2 f1e1',
 ' f4f2 c1d2 f2d2 c2d2 b8a8 g5g3 d8e8 d2e2',
 ' e8f8 h2g4 h8h7 d5c4 g6g5 h3h4 f6a6',
 ' d2e3 d8e8 f3d4 a3a4 d4b3 a4d4 c1b1 f6f8 e3d4',
 ' f8f7 a1d1 g8g7 c4c5 g7h7 d7e6',
 ' h8h7 a3a4 g7g5 c6c5 h7g7 h4g5',
 ' a3a2 h3g1 b8f8 g1e2 f8f7 d4c3',
 ' a5c6 d3e2 a6a5 h2h1 h7h8',
 ' f3e5 f7e6 e5d7 f8h6 d7b6',
 ...]
In [77]:
video_dftest['label'] = video_moves
video_dftest
Out[77]:
VideoID label
0 0.mp4 b4f8 a6a8 b1c3 e8d7 a3a1 b8c6
1 1.mp4 b3b2 d1c3 b2d2 b6b3 a2b2 f3e2 a3b5 e2f3 b2b3
2 2.mp4 g7f7 c3f3 h5h4 f3f2 f8d6 f1g1 f7f2 d4d5 f2f5
3 3.mp4 e5e6 b4a3 a7h7 b5b3 h2g1 b3b1 g1f2 b1g1 h7d7
4 4.mp4 e5e4 b3b2 e4d4 c1d2 c6d8 f4e6 d8e6 a2a4 e6d8
... ... ...
1995 1995.mp4 d8g8 c1b1 b2c2 b6d7 g7e5 g3f3
1996 1996.mp4 h7h5 a1c1 a8a6 d2d3 f7f5
1997 1997.mp4 c3c5 g5h7 c5b5 d3d4 b5c5 d2d1 c5c4 d1d2 c4c1
1998 1998.mp4 e3e6 c8e7 b1c3 f7f5 c5b6
1999 1999.mp4 c6h1 a1d1 d3f2 f1f2 a7a6 e1g1 c8d8 g1g2 b8a8

2000 rows × 2 columns

Submission ✉

In [78]:
submission = pd.read_csv("data/video/sample_submission.csv")
submission['label'] = video_moves
submission.to_csv("data/video/submission.csv", index=False)
In [79]:
%aicrowd submission create -c chess-transcription -f data/video/submission.csv
                                    ╭─────────────────────────╮                                     
                                    │ Successfully submitted! │                                     
                                    ╰─────────────────────────╯                                     
                                          Important links                                           
┌──────────────────┬───────────────────────────────────────────────────────────────────────────────┐
│  This submission │ https://www.aicrowd.com/challenges/ai-blitz-6/submissions/122875              │
│                  │                                                                               │
│  All submissions │ https://www.aicrowd.com/challenges/ai-blitz-6/submissions?my_submissions=true │
│                  │                                                                               │
│      Leaderboard │ https://www.aicrowd.com/challenges/ai-blitz-6/leaderboards                    │
│                  │                                                                               │
│ Discussion forum │ https://discourse.aicrowd.com/c/ai-blitz-6                                    │
│                  │                                                                               │
│   Challenge page │ https://www.aicrowd.com/challenges/ai-blitz-6                                 │
└──────────────────┴───────────────────────────────────────────────────────────────────────────────┘

Comments

You must login before you can post a comment.

Execute