Any good positions to test hash tables?

Discussion of chess software programming and technical issues.

Moderator: Ras

JVMerlino
Posts: 1404
Joined: Wed Mar 08, 2006 10:15 pm
Location: San Francisco, California

Re: Any good positions to test hash tables?

Post by JVMerlino »

bob wrote:
JVMerlino wrote:
bob wrote:This is not so much about finding Kb1 as getting to depth 30. If you have optimal move ordering, this will take to depth 26 or so to find Kb1. If your move ordering is worse, then you will actually find it at a shallower depth due to search grafting. I can explain how if you are interested. But John now gets to depth 30 in 1 second or so which seems reasonable...
Ok, since Myrddin finds Rb1 at depth 21, I'm now very curious to know why this is possibly a bad thing. :?

Move ordering in Myrddin is, like the rest of the engine, fairly primitive. But it does use history and killers, plus has the normal move-type ordering:

PV move
Hash move
Capture (MVV/LVA), with killers after good captures and before bad captures
Checks
Quiet moves

jm
OK, here is how you find the solution.

I assume you have looked at the position and PV carefully and understand that with best play by both sides, this position requires 13 non-capturing/non-checking moves by each side, and on the 27th ply (first ply of q-search) white finally captures a pawn. I think this is covered in Newborn's book on computer chess where he talks about his endgame-specific program called "peasant"...

In 21 plies you can't possibly win a pawn, so how does the search see it?

Suppose your move ordering for black is really bad, so that at each ply white makes a good move and black makes a lousy move. By the time you get to (say) depth 19, which discovers it can win a pawn. But that is not so useful, since black gets opportunities at each ply to find better moves to improve it's score, right? But along comes the hash table and along that PV you store the result that says "if I can reach this position, I win a pawn". And while with best play by both sides, you can't force the win of a pawn, you will discover that with best play by both sides you _can_ reach one of those positions where you found you win a pawn if black had played poorly. You graft that score onto the current position. Suppose we are at ply=21 for white, and from this position it takes another 6 plies to win the pawn. With a depth=21 search, you can't see this. But if black played like a patzer, you might have reached this position at depth=12 and saw "aha, I win a pawn." Now with best play you force that position (that you saw at ply=12) to happen, and remember you were still doing a 21 ply search, so that you searched 9 plies further and spotted the pawn win. Now at depth=21, you forced the game to reach that position you previously encountered at depth=12, and use that hash entry. Which, by the way, has a "draft" of 9 plies don't forget. You graft that onto the current 21 ply search, and actually pull off a 30 ply search on iteration 21, and spot the win.

If you had not first searched lousy moves for black, then you would not know that position is won, and your 21 ply search would still show Kb2 as the best move and white simply a single pawn ahead, as in the starting position.

Ugly, but effective. :)

Bob
Ok, I understand that explanation. Thanks, Bob! :D

jm
Mark
Posts: 216
Joined: Thu Mar 09, 2006 9:54 pm

Re: Any good positions to test hash tables?

Post by Mark »

Yes, thanks everyone for the discussions on hash. I'm learning quite a bit!
bob
Posts: 20943
Joined: Mon Feb 27, 2006 7:30 pm
Location: Birmingham, AL

Re: Any good positions to test hash tables?

Post by bob »

JVMerlino wrote:
bob wrote:
JVMerlino wrote:
bob wrote:This is not so much about finding Kb1 as getting to depth 30. If you have optimal move ordering, this will take to depth 26 or so to find Kb1. If your move ordering is worse, then you will actually find it at a shallower depth due to search grafting. I can explain how if you are interested. But John now gets to depth 30 in 1 second or so which seems reasonable...
Ok, since Myrddin finds Rb1 at depth 21, I'm now very curious to know why this is possibly a bad thing. :?

Move ordering in Myrddin is, like the rest of the engine, fairly primitive. But it does use history and killers, plus has the normal move-type ordering:

PV move
Hash move
Capture (MVV/LVA), with killers after good captures and before bad captures
Checks
Quiet moves

jm
OK, here is how you find the solution.

I assume you have looked at the position and PV carefully and understand that with best play by both sides, this position requires 13 non-capturing/non-checking moves by each side, and on the 27th ply (first ply of q-search) white finally captures a pawn. I think this is covered in Newborn's book on computer chess where he talks about his endgame-specific program called "peasant"...

In 21 plies you can't possibly win a pawn, so how does the search see it?

Suppose your move ordering for black is really bad, so that at each ply white makes a good move and black makes a lousy move. By the time you get to (say) depth 19, which discovers it can win a pawn. But that is not so useful, since black gets opportunities at each ply to find better moves to improve it's score, right? But along comes the hash table and along that PV you store the result that says "if I can reach this position, I win a pawn". And while with best play by both sides, you can't force the win of a pawn, you will discover that with best play by both sides you _can_ reach one of those positions where you found you win a pawn if black had played poorly. You graft that score onto the current position. Suppose we are at ply=21 for white, and from this position it takes another 6 plies to win the pawn. With a depth=21 search, you can't see this. But if black played like a patzer, you might have reached this position at depth=12 and saw "aha, I win a pawn." Now with best play you force that position (that you saw at ply=12) to happen, and remember you were still doing a 21 ply search, so that you searched 9 plies further and spotted the pawn win. Now at depth=21, you forced the game to reach that position you previously encountered at depth=12, and use that hash entry. Which, by the way, has a "draft" of 9 plies don't forget. You graft that onto the current 21 ply search, and actually pull off a 30 ply search on iteration 21, and spot the win.

If you had not first searched lousy moves for black, then you would not know that position is won, and your 21 ply search would still show Kb2 as the best move and white simply a single pawn ahead, as in the starting position.

Ugly, but effective. :)

Bob
Ok, I understand that explanation. Thanks, Bob! :D

jm
The bad thing is, the worse your ordering sucks, the shallower the depth needed to solve problems like this. However, bad ordering hurts everything overall. So the plies go by slower, but for this particular type of position where transpositions are incredibly common (pawns are locked so nothing but king moves until white breaks thru and wins a pawn to open things up) you see the right answer at a shallower depth. But in a longer time.

Crafty finds this at depth=24, for example, but uses < 0.01 seconds to get there. Reductions hurt. Pruning hurts. But 24 plies in < 0.01 is way better than finding it at depth=18 but needing much more time...

The depth is irrelevant, only the time matters in chess...
User avatar
michiguel
Posts: 6401
Joined: Thu Mar 09, 2006 8:30 pm
Location: Chicago, Illinois, USA

Re: Any good positions to test hash tables?

Post by michiguel »

bob wrote:
JVMerlino wrote:
bob wrote:
JVMerlino wrote:
bob wrote:This is not so much about finding Kb1 as getting to depth 30. If you have optimal move ordering, this will take to depth 26 or so to find Kb1. If your move ordering is worse, then you will actually find it at a shallower depth due to search grafting. I can explain how if you are interested. But John now gets to depth 30 in 1 second or so which seems reasonable...
Ok, since Myrddin finds Rb1 at depth 21, I'm now very curious to know why this is possibly a bad thing. :?

Move ordering in Myrddin is, like the rest of the engine, fairly primitive. But it does use history and killers, plus has the normal move-type ordering:

PV move
Hash move
Capture (MVV/LVA), with killers after good captures and before bad captures
Checks
Quiet moves

jm
OK, here is how you find the solution.

I assume you have looked at the position and PV carefully and understand that with best play by both sides, this position requires 13 non-capturing/non-checking moves by each side, and on the 27th ply (first ply of q-search) white finally captures a pawn. I think this is covered in Newborn's book on computer chess where he talks about his endgame-specific program called "peasant"...

In 21 plies you can't possibly win a pawn, so how does the search see it?

Suppose your move ordering for black is really bad, so that at each ply white makes a good move and black makes a lousy move. By the time you get to (say) depth 19, which discovers it can win a pawn. But that is not so useful, since black gets opportunities at each ply to find better moves to improve it's score, right? But along comes the hash table and along that PV you store the result that says "if I can reach this position, I win a pawn". And while with best play by both sides, you can't force the win of a pawn, you will discover that with best play by both sides you _can_ reach one of those positions where you found you win a pawn if black had played poorly. You graft that score onto the current position. Suppose we are at ply=21 for white, and from this position it takes another 6 plies to win the pawn. With a depth=21 search, you can't see this. But if black played like a patzer, you might have reached this position at depth=12 and saw "aha, I win a pawn." Now with best play you force that position (that you saw at ply=12) to happen, and remember you were still doing a 21 ply search, so that you searched 9 plies further and spotted the pawn win. Now at depth=21, you forced the game to reach that position you previously encountered at depth=12, and use that hash entry. Which, by the way, has a "draft" of 9 plies don't forget. You graft that onto the current 21 ply search, and actually pull off a 30 ply search on iteration 21, and spot the win.

If you had not first searched lousy moves for black, then you would not know that position is won, and your 21 ply search would still show Kb2 as the best move and white simply a single pawn ahead, as in the starting position.

Ugly, but effective. :)

Bob
Ok, I understand that explanation. Thanks, Bob! :D

jm
The bad thing is, the worse your ordering sucks, the shallower the depth needed to solve problems like this. However, bad ordering hurts everything overall. So the plies go by slower, but for this particular type of position where transpositions are incredibly common (pawns are locked so nothing but king moves until white breaks thru and wins a pawn to open things up) you see the right answer at a shallower depth. But in a longer time.

Crafty finds this at depth=24, for example, but uses < 0.01 seconds to get there. Reductions hurt. Pruning hurts. But 24 plies in < 0.01 is way better than finding it at depth=18 but needing much more time...

The depth is irrelevant, only the time matters in chess...
How many nodes is that? That will be easier to normalize the comparison.

My program sees Kb1 in 54k nodes (ply17). 100k nodes (ply23) if I use material only in eval (64Mb of hash, but I think it is very relevant since only 2.8% is filled).

Are you using LMR?
Miguel
User avatar
Steve Maughan
Posts: 1296
Joined: Wed Mar 08, 2006 8:28 pm
Location: Florida, USA

Re: Any good positions to test hash tables?

Post by Steve Maughan »

I like this position. The key move is c7

[d]2k5/8/1pP1K3/1P6/8/8/8/8 w - -

Unlike Fine 70 (which is also a good test), the key move cannot be found by accident (i.e. it looks like a bad move unless you see the full line).

As an aside this position was used in the sales literature of the Fidelity Mach III back in ~1988. Basically, without a hash table it is almost impossible to find. Nowadays it's trivial. The good programs even see announce mate in 21.

Steve
JVMerlino
Posts: 1404
Joined: Wed Mar 08, 2006 10:15 pm
Location: San Francisco, California

Re: Any good positions to test hash tables?

Post by JVMerlino »

Steve Maughan wrote:I like this position. The key move is c7

[d]2k5/8/1pP1K3/1P6/8/8/8/8 w - -

Unlike Fine 70 (which is also a good test), the key move cannot be found by accident (i.e. it looks like a bad move unless you see the full line).

As an aside this position was used in the sales literature of the Fidelity Mach III back in ~1988. Basically, without a hash table it is almost impossible to find. Nowadays it's trivial. The good programs even see announce mate in 21.

Steve
Yep, a good one. After turning off tablebases, of course, Myrddin gets this:

Code: Select all

 6   191      3      1398 e6d6 c8d8 d6d5 d8c7 d5e5 c7d8 
 7   191      3      1946 e6d6 c8d8 d6d5 d8c7 d5e5 c7d8 e5d5 
 8   191      4      3235 e6d6 c8d8 d6e5 d8c8 e5d6 
 9   191      4      4119 e6d6 c8d8 d6e5 d8c8 e5d6 
10   191      6      5251 e6d6 c8d8 d6e5 d8c8 e5d6 
11   191      6      6764 e6d6 c8d8 d6e5 d8c8 e5d6 
11   231      7      8155 c6c7! 
11   341      7      8777 c6c7! 
11   601      7     10764 c6c7 c8c7 e6e7 c7c8 e7d6 c8d8 d6c6 d8c8 c6b6 c8d7 b6b7 
12   601     11     13530 c6c7 c8c7 e6e7 c7c8 e7e6 c8c7 
13   601     11     15146 c6c7 c8c7 e6e7 c7c8 e7e6 c8c7 
14   601     12     18055 c6c7 c8c7 e6e7 c7c8 e7e8 c8c7 e8e7 
15   601     14     20517 c6c7 c8c7 e6e7 c7c8 e7e8 c8c7 e8e7 
16   601     14     25362 c6c7 c8c7 e6e7 c7c8 e7e8 c8c7 e8e7 
17   601     15     28813 c6c7 c8c7 e6e7 c7c8 e7e8 c8c7 e8e7 
18   601     17     35362 c6c7 c8c7 e6e7 c7c8 e7e8 c8c7 e8e7 
19   601     18     43229 c6c7 c8c7 e6e7 c7c8 e7e8 c8c7 e8e7 
20   601     21     53343 c6c7 c8c7 e6e7 c7c8 e7e8 c8c7 e8e7 
21   601     21     54958 c6c7 c8c7 e6e7 c7c8 e7e8 c8c7 e8e7 
22   601     23     55160 c6c7 c8c7 e6e7 c7c8 e7e8 c8c7 e8e7 
23   641     68    196636 c6c7! 
23   751    110    293354 c6c7! 
23  1000    326   1620840 c6c7 c8c7 e6e7 c7c8 e7d6 c8b8 d6c6 b8c8 c6b6 c8b8 b6a6 b8c7 b5b6 c7c8 a6a7 c8d7 b6b7 d7e6 b7b8Q e6f5 b8f8 f5e4 f8d6 e4e3 a7b6 
24  1040    454   2048635 c6c7! 
24  1054    725   3681462 c6c7 c8c7 e6e7 c7c8 e7d6 c8d8 d6c6 d8c8 c6b6 c8b8 b6a6 b8c7 b5b6 c7c8 a6a7 c8d7 b6b7 d7e6 b7b8Q e6f5 b8b4 f5g5 b4e4 g5h5 a7b6 
25  1054    811   4058294 c6c7 c8c7 e6e7 c7c8 e7d6 c8d8 d6c6 d8c8 c6b6 c8b8 b6a6 b8c7 b5b6 c7c8 a6a7 c8d7 b6b7 d7e6 b7b8Q e6f5 b8b4 f5g5 b4e4 g5h5 a7b6 h5h6 
26  1056   1074   5037947 c6c7 c8c7 e6e7 c7c8 e7d6 c8d8 d6c6 d8c8 c6b6 c8b8 b6a6 b8c7 b5b6 c7c8 a6a7 c8d7 b6b7 d7e6 b7b8Q e6f5 b8b4 f5g5 a7b7 g5f6 b4f4 f6g7 f4d4 g7f7 b7c6 
27  1096   4806  25663745 c6c7! 
27  1206   5600  29556111 c6c7! 
27 32708   6918  38808592 c6c7 c8c7 e6e7 c7c8 e7d6 c8d8 d6c6 d8c8 c6b6 c8d8 b6a7 d8c8 b5b6 c8d7 b6b7 d7d6 b7b8Q d6c5 b8e5 c5c4 e5f5 c4d4 f5f3 d4c4 f3e3 c4b4 e3d4 b4b3 d4d3 b3b4 d3c2 
28 32708   7109  40144076 c6c7 c8c7 e6e7 c7c8 e7d6 c8d8 d6c6 d8c8 c6b6 c8d8 b6a7 d8c8 b5b6 c8d7 b6b7 d7d6 b7b8Q d6c5 b8e5 c5c4 e5f5 c4d4 f5g5 d4c4 g5e3 c4b4 e3d2 b4b3 d2d3 b3b4 d3c2 
The Mate in 39 is obviously not optimal, but still encouraging.

Thanks, Steve!

jm
Mark
Posts: 216
Joined: Thu Mar 09, 2006 9:54 pm

Re: Any good positions to test hash tables?

Post by Mark »

Steve Maughan wrote:I like this position. The key move is c7

[d]2k5/8/1pP1K3/1P6/8/8/8/8 w - -

Unlike Fine 70 (which is also a good test), the key move cannot be found by accident (i.e. it looks like a bad move unless you see the full line).

As an aside this position was used in the sales literature of the Fidelity Mach III back in ~1988. Basically, without a hash table it is almost impossible to find. Nowadays it's trivial. The good programs even see announce mate in 21.

Steve
Wow, took me 19 ply and about 5 minutes to find... Good test position, thanks!
User avatar
Steve Maughan
Posts: 1296
Joined: Wed Mar 08, 2006 8:28 pm
Location: Florida, USA

Re: Any good positions to test hash tables?

Post by Steve Maughan »

Hi Mark,
Mark wrote:Wow, took me 19 ply and about 5 minutes to find... Good test position, thanks!
If your engine takes 19 ply and 5 minutes without hash then that is really quite good. If it has hash then I suspect there is a problem. On modern hardware the key move and win (score > 8 pawns) should be found in seconds if the hash is working correctly.

Steve
Mark
Posts: 216
Joined: Thu Mar 09, 2006 9:54 pm

Re: Any good positions to test hash tables?

Post by Mark »

Steve Maughan wrote:Hi Mark,
Mark wrote:Wow, took me 19 ply and about 5 minutes to find... Good test position, thanks!
If your engine takes 19 ply and 5 minutes without hash then that is really quite good. If it has hash then I suspect there is a problem. On modern hardware the key move and win (score > 8 pawns) should be found in seconds if the hash is working correctly.

Steve
Unfortunately, that was with hash (and null move off):

2k5/8/1pP1K3/1P6/8/8/8/8 w - -

Code: Select all

    +---+---+---+---+---+---+---+---+
 8  |   | . |*K | . |   | . |   | . |
    +---+---+---+---+---+---+---+---+
 7  | . |   | . |   | . |   | . |   |   ep_square = 0
    +---+---+---+---+---+---+---+---+   castle_wk = 0
 6  |   |*P | P | . | K | . |   | . |   castle_wq = 0
    +---+---+---+---+---+---+---+---+   castle_bk = 0
 5  | . | P | . |   | . |   | . |   |   castle_bq = 0
    +---+---+---+---+---+---+---+---+
 4  |   | . |   | . |   | . |   | . |
    +---+---+---+---+---+---+---+---+
 3  | . |   | . |   | . |   | . |   |   White to move
    +---+---+---+---+---+---+---+---+
 2  |   | . |   | . |   | . |   | . |
    +---+---+---+---+---+---+---+---+
 1  | . |   | . |   | . |   | . |   |
    +---+---+---+---+---+---+---+---+

      a   b   c   d   e   f   g   h

depth     nodes    time eval  pc
----------------------------------------------------------------------------
   1          8    0.00  140 Ke6d5 
   2         34    0.00  137 Ke6d5 Kc8c7 
   3        123    0.00  139 Ke6d6 Kc8d8 Kd6d5 
   4        315    0.00  136 Ke6d6 Kc8d8 Kd6d5 Kd8e7 
   5        692    0.00  140 Ke6d6 Kc8d8  c6c7 Kd8c8 Kd6d5 
   6       1435    0.00  137 Ke6d5 Kc8d8 Kd5d4 Kd8e8 Kd4d5 Ke7f7 
   7       3212    0.00  139 Ke6d5 Kc8d8 Kd5d6 Kd8c8  c6c7 Kc8b7 Kd6d5 
   8       5561    0.00  139 Ke6d5 Kc8d8 Kd5d6 Kd8c8 Kd6e6 Kc8d8 Ke6d6 Kd8e7 
   9      15946    0.01  139 Ke6d5 Kc8c7 Kd5d4 Kc7d8 Kd4d5 Kd8c7 Kd5e5 Kc7d8 
  10      25465    0.03  139 Ke6d5 Kc8c7 Kd5e5 Kc7c8 Ke5e6 Kc8c7 Ke6e5 Kb8a8 
  11      42663    0.05  139 Ke6d5 Kc8c7 Kd5e5 Kc7c8 Ke5e6 Kc8c7 Ke6e5  c6c7 
  12      68947    0.09  139 Ke6d5 Kc8c7 Kd5e5 Kc7c8 Ke5e6 Kc8c7 Ke6e5 Kc7c8 
  13     166729    0.17  139 Ke6d5 Kc8c7 Kd5e5 Kc7c8 Ke5e6 Kc8c7 Ke6e5 Kc7c8 
  14     910450    0.92  140 Ke6d5 Kc8c7 Kd5e5 Kc7c8 Ke5d4 Kc8d8 Kd4e4 Kd8c8 
  15    8637096    6.86  916 Ke6d5 Kc8c7 Kd5e5 Kc7c8 Ke5e6 Kc8c7 Ke6d5 Kc7d8 
  16   12431087   10.67  137 Ke6d5 Kc8c7 Kd5c4 Kc7d6 Kc4d3 Kd6e6 Kd3e4 Ke6d6 
  17   26137844   21.15  140 Ke6d5 Kc8c7 Kd5e5 Kc7c8 Ke5f4 Kc8d8 Kf4e5 Kd8e7 
  18   74432442   67.64  140 Ke6d5 Kc8c7 Kd5e5 Kc7c8 Ke5f4 Kc8d8 Kf4e5 Kd8c8 
  19  346675992  268.08  886  c6c7 Kc8c7 Ke6e7 Kc7b7 Ke7d7 Kb7a7 Kd7c7 Ka7a8 
I currently don't have any draw by repetition detection and no quiese search (I just extend one ply on a capture or promotion). Maybe that has something to do with it?
User avatar
hgm
Posts: 28387
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Any good positions to test hash tables?

Post by hgm »

It takes Fairy-Max less then half a second, on my 1.3GHz Celeron M with 48MB hash.

Fairy-Max has no rep-draw detection, only for positions that have occured in the game before, which are none in this case, since it was a virgin start. And should have switched null-move and LMR off in this position.

Code: Select all

 26	+8.01	4.2M	0:09.44	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7 b7b8 d7c6 b8a7 c6c7 a7a8 c7b6 a8b8 b6a6 b8c8 a6a7 c8d8 b5b6 d8d7 b6b7 d7d6
 25	+7.95	2.9M	0:06.66	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7 b7b8 d7c6 b8a7 c6c7 a7a8 c7b6 a8b8 b6a6 b8c7 b5b6 c7d6 b6b7
 24	+7.93	1.8M	0:04.06	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7 b7b8 d7c6 b8a7 c6c7
 23	+7.86	592524	0:01.33	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7 b7b8 d7c6 b8a7 c6c7 a7a8 c7b6
 22	+7.81	281145	0:00.64	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7 b7b8 d7d6 b8b7
 21	+7.83	191682	0:00.48	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7 b7b8 d7c6 b8a7 c6c7 a7a8 c7b6
 20	+1.90	151686	0:00.40	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7 b7b8 d7c6 b8a7 c6c7 a7a8 c7b6 a8b8
 19	+1.58	112661	0:00.33	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7 b7b8 d7d6 b8b7
 18	+1.60	101280	0:00.31	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7 b7b8 d7c6 b8c8 c6b6 c8d7 b6a6 d7d6 b5b6 d6d5 b6b7 d5e5
 17	+1.26	82474	0:00.27	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7 b7b8 d7d8 b8b7 d8d7
 16	+1.19	73388	0:00.25	c6c7 c8c7 e6e7 c7c8 e7d6 c8b7 d6d7
 16	+0.99	61240	0:00.22	e6e5 c8c7 e5e6 c7c8
 15	+1.01	49493	0:00.20	e6e5 c8c7 e5e6 c7c8
 14	+1.03	36274	0:00.15	e6e5 c8c7 e5e6 c7c8
 13	+1.05	27918	0:00.13	e6e5 c8c7 e5e6 c7c8
 12	+1.07	19757	0:00.12	e6e5 c8c7 e5e6 c7c8
 11	+1.09	12911	0:00.10	e6e5 c8c7 e5e6 c7c8
 10	+1.11	8689	0:00.09	e6e5 c8c7 e5e6 c7c8
  9	+1.13	5205	0:00.09	e6e5 c8c7 e5e6 c7c8
  8	+1.15	3418	0:00.07	e6e5 c8c7 e5e6 c7c8
  7	+1.17	2512	0:00.07	e6e5 c8c7 e5e6 c7c8
  6	+1.19	1873	0:00.07	e6e5 c8c7 e5e6 c7c8
  6	+0.63	1572	0:00.07	e6f6 c8d8 f6e6
  6	+0.62	1183	0:00.07	e6d6 c8d8 d6e6 d8c7 e6e5 c7c8
  5	+1.21	648	0:00.03	e6d6 c8d8 c6c7 d8c8 d6c6
  4	+1.42	233	0:00.03	e6d6 c8d8 c6c7 d8e8
  3	+1.29	172	0:00.02	e6d6 c8d8 c6c7
  3	+0.78	139	0:00.02	e6f6 c8c7 f6e5
  3	+0.54	105	0:00.02	e6f5 c8c7 f5e4
  2	+0.82	53	0:00.02	e6f5 c8c7
  2	+0.76	31	0:00.02	e6f6 c8c7
  2	+0.59	23	0:00.02	e6d6 c8d8
  1	+0.88	15	0:00.02	e6d6

  1	+0.78	13	0:00.02	e6e5