gencols: techniques
gencols: techniques
Though gencols is probably one of the first search programs for Conway's Game of Life,
it's still one of the most useful tools for exploring it.
I'd like to share some of my experience of working with gencols.
EDIT: It seems that the idea with a game doesn't really work out, so I'll just share my insights about gencols one after another.
it's still one of the most useful tools for exploring it.
I'd like to share some of my experience of working with gencols.
EDIT: It seems that the idea with a game doesn't really work out, so I'll just share my insights about gencols one after another.
Ivan Fomichev
Re: gencols: techniques
Example #1
Q: Find all unique collisions of a glider with each of standard spaceships, that don't destroy the spaceship and leave something behind.
A:
"-nph 2" refers to the phases of each spaceship, we need just two, because spaceships are glide-symmetric, and we've already got all four gliders (and there are two pairs of symmetric patterns). "-tc 30 33" is because glider period is 4. "-del2" means, that we should be able to delete the second pattern in the place where it would be after 199 generations (gencols starts generation numbering with 1), if there were no collision. "-filt ap" means that we're looking for both periodic and aperiodic patterns. A periodic pattern is anything that repeats itself with an optional shift in up to 4 generations. Everything else is considered aperiodic. E. g. empty pattern, block, blinker, pulsar, glider and a spaceship are considered periodic, but r-pentamino, domino, a glider and a blinker and a pentadecathlon are considered aperiodic. One needs to specify "-filt ap", because otherwise gencols will also include those pattern, where deletion of the second pattern failed.
There is a way to change the maximum oscillator period detected by gencols, if you want to hunt for pentadecathlons, for instance.
The last parameter, "-geq 1" instructs gencols to display only those results that have 1 or more cells. This number refers to the number of all cells after all removals that may have taken place (in our case, removal of the spaceship).
Q: Find all unique collisions of a glider with each of standard spaceships, that don't destroy the spaceship and leave something behind.
A:
Code: Select all
./gencols -pat obj/glider.list obj/allss_n.list -nph 2 -tc 30 33 -gen 200 -del2 -filt ap -geq 1
There is a way to change the maximum oscillator period detected by gencols, if you want to hunt for pentadecathlons, for instance.
Code: Select all
--- a/output.c
+++ b/output.c
@@ -62,7 +62,7 @@ int gen,resultafter,delpat1,delpat2,synch,genresult,pat1offset,pat2offset,phase;
}
#endif
-#define MAXOSCTEST 4
+#define MAXOSCTEST 30
removefailed=0;
if (countpat(tmp,tgen)
==countpat(pat1gen,tgen)+countpat(pat2gen,tgen)
@@ -158,7 +158,7 @@ int maxmove=0;
if (removefailed && !strchr(filterstring,'f') ) return;
if (per== -1 && !strchr(filterstring,'n') ) return;
if (per>MAXOSCTEST && !strchr(filterstring,'a') ) return;
- if (per>=1 && per <=4 && !strchr(filterstring,'p') &&
+ if (per>=1 && per <= MAXOSCTEST && !strchr(filterstring,'p') &&
!strchr(filterstring,'0'+per)
&& (maxmove!=1 || !strchr(filterstring,'g'))
&& (maxmove!=2 || !strchr(filterstring,'s'))) return;
Ivan Fomichev
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
How would you search with gencols for all interactions of two pies on blinker tracks that do not destroy the pies?
Re: gencols: techniques
I would create two following pattern files:
pi.life
pi_g136.life
Then I would run gencols with:
pi.life
Code: Select all
..*
..*
..*
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.***
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..*
..*
..*
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.***
.
.
.
.
.
.
.
.
.
.
.
.
..*
.***
**.**
Code: Select all
.
.***
.
.
.
.
.
.
.
.
.
.
.
.
..*
.***
**.**
.
.
.
.
.
.
.
.***
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..*
..*
..*
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.***
Code: Select all
./gencols -pat pi.life pi.life -nph 45 -tc 2 91 -gen 136 -test1 pi_g136.life -test2 pi_g136.life -genafter 50 -filt ap >result.col
Ivan Fomichev
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
Does the last version of gencols run on win7 64 bit?
Thanks in advance;
Hartmut
Thanks in advance;
Hartmut
Re: gencols: techniques
I don't know about Windows, but I had to do some adjustments in order to make it work on my 64-bit Mac.
The diff is against https://github.com/codeholic/gencols so I'm not sure whether it works for the original gencols.
The diff is against https://github.com/codeholic/gencols so I'm not sure whether it works for the original gencols.
Code: Select all
diff --git a/Makefile b/Makefile
index 398275a..7e5419f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
CC = gcc
-CFLAGS = -O3
+CFLAGS = -O3 -m64
all: gencols makematrix makepatlist
diff --git a/boxes.c b/boxes.c
index 69aa457..f702dec 100644
--- a/boxes.c
+++ b/boxes.c
@@ -15,7 +15,7 @@
#include <stdio.h>
#include <limits.h>
-#include <malloc.h>
+//#include <malloc.h>
#include "defs.h"
diff --git a/defs.h b/defs.h
index 1983696..9a24cbf 100644
--- a/defs.h
+++ b/defs.h
@@ -36,7 +36,7 @@ typedef struct {
int maxc,maxr;
} TORUS;
-typedef unsigned long cellseg;
+typedef unsigned int cellseg;
#define WORDLEN 32
#define URBIT 0
diff --git a/lists.c b/lists.c
index 4a178d5..8dd1151 100644
--- a/lists.c
+++ b/lists.c
@@ -14,7 +14,7 @@
#include <stdio.h>
#include <limits.h>
-#include <malloc.h>
+//#include <malloc.h>
#include "defs.h"
#define HASHMULT 1999
diff --git a/makematrix.c b/makematrix.c
index d446f0b..2850ca5 100644
--- a/makematrix.c
+++ b/makematrix.c
@@ -14,7 +14,7 @@
#include <stdio.h>
#include <limits.h>
-#include <malloc.h>
+//#include <malloc.h>
#include "defs.h"
char inpline[MAXPATLEN];
diff --git a/makepatlist.c b/makepatlist.c
index 6f84742..fb792ec 100644
--- a/makepatlist.c
+++ b/makepatlist.c
@@ -15,7 +15,7 @@
#include <stdio.h>
#include <limits.h>
-#include <malloc.h>
+//#include <malloc.h>
#include "defs.h"
char inpline[MAXPATLEN];
diff --git a/output.c b/output.c
index 222e3f8..8c9cec4 100644
--- a/output.c
+++ b/output.c
@@ -15,7 +15,7 @@
#include <stdio.h>
#include <limits.h>
-#include <malloc.h>
+//#include <malloc.h>
#include "defs.h"
char filterstring[MAXLINE]="apnf";
Ivan Fomichev
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
I don't have a C compiler on my current machine.
I downloaded the gencols version from the forum.
I downloaded the gencols version from the forum.
Re: gencols: techniques
Google search for "gcc windows" returns http://www.mingw.org/ as the first link. (I haven't tried it myself, but people at stackoverflow also recommend it.)
Ivan Fomichev
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
My (windows) version of gencols doesn't find any files, no matter where I start it from.
What could be the reason? Does windows understand the extension *.life?
@codeholic: Could you run the pi search you proposed and tell me if there are any interesting results additionally to those already used in the caterpillar recipe?
Thanks for any help,
Hartmut
What could be the reason? Does windows understand the extension *.life?
@codeholic: Could you run the pi search you proposed and tell me if there are any interesting results additionally to those already used in the caterpillar recipe?
Thanks for any help,
Hartmut
Re: gencols: techniques
Windows shouldn't care what a file is named, and I've never had any trouble with .life files on my Windows laptop.HartmutHolzwart wrote:My (windows) version of gencols doesn't find any files, no matter where I start it from.
What could be the reason? Does windows understand the extension *.life?
Have you tried something radical, like moving the gencols executable to a folder right under the root directory -- C:\temp, let's say -- and specifying the full path in the call to gencols?
Code: Select all
.\gencols -pat C:\temp\pi.life C:\temp\pi.life -nph 45 -tc 2 91 -gen 136 -test1 C:\temp\pi_g136.life -test2 C:\temp\pi_g136.life -genafter 50 -filt ap > C:\temp\result.col
It's also worth actually running "cmd" (instead of relying on batch files -- just in case that's what you're doing), manually switching to the gencols directory, and running a "dir" to make sure that everything is really there and the names are all exactly correct.
I mention this only because Windows has always had a very nasty habit of hiding file extensions -- I have to turn off that "feature" immediately whenever I move to a new system. So it's perfectly possible to create your pi.life files in a text editor, and have Windows report that they're called plain old "pi.life". But when you check the directory listing, they're "pi.life.txt" ...!
-- Just trying to come up with a theory here. Otherwise I don't see why gencols couldn't find a file in the same directory as the executable.
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
Thanks for your hints!
So it's most liekly no 64 bit problem?
I use teh version that Paul Tooke uploaded es .exe in this forum.
So it's most liekly no 64 bit problem?
I use teh version that Paul Tooke uploaded es .exe in this forum.
Re: gencols: techniques
Not too likely. I have a 64-bit Windows machine, and I just set up gencols as I suggested and ran the search as codeholic suggested. Results are attached -- I haven't looked to see if they're the right results, though...HartmutHolzwart wrote:So it's most liekly no 64 bit problem?
I'm using the version of gencols that I compiled and posted last year -- I haven't tried Paul Tooke's version, but probably I should, just to see if there's some strange incompatibility (with the new -rule command-line parameter he added, maybe?) You got your copy from this link, I take it?
- Attachments
-
- result.zip
- results for gencols pi-climber collision search
- (163.03 KiB) Downloaded 837 times
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
you were completely correct! I created a txt file!
Many thanks,
Hartmut
Many thanks,
Hartmut
Re: gencols: techniques
As for 32 ./. 64
I found out the hard way, that the original version of gencols does *not* work correctly when compiled for 64 bits.
I recompiled with -m32 and ... tada ... the "example #1" posted by codeholic in this thread suddenly worked.
I found out the hard way, that the original version of gencols does *not* work correctly when compiled for 64 bits.
I recompiled with -m32 and ... tada ... the "example #1" posted by codeholic in this thread suddenly worked.
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
Found under the gencols pi collision results:
Code: Select all
x = 60, y = 105, rule = B3/S23
2$40b3o16$9b3o29bo$41bo$41bo3$40b3o$9b3o27bo3bo$9b3o27b2ob2o$9b3o$7bo
5bo$5b3o5b3o16bo17bo$b3o6bo6b3o10b3o3b2o7b2o3b3o$bo7b3o7bo9bo4bo2bo7bo
2bo4bo$b3o2bob2ob2obo2b3o9bo3bo15bo3bo$6b4ob4o14bo5b4o5b4o5bo$4b2ob2o
3b2ob2o13b2o4b2o7b2o4b2o$32b3o13b3o$5b2o7b2o17b2o13b2o$6b2o5b2o19bo3bo
5bo3bo$7bo5bo$35bo2bo5bo2bo$36bobo5bobo2$9b3o29bo$41bo$41bo14$10bo19bo
bo$10bo22bo$10bo22bo6b3o$30bo2bo$31b3o14$9b3o22$32b2o$32b3o$31bob2o$
31b3o$32bo!
Re: gencols: techniques
You can find all of them by
Code: Select all
fgrep '(4,' result.col | ./makematrix -space 200 >result.life
Ivan Fomichev
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
The interesting thing is that this produces a downward LWSS...
Probably of no use but curious.
Probably of no use but curious.
Re: gencols: techniques
Actually there is a very good use for it, namely a glider filter.HartmutHolzwart wrote:The interesting thing is that this produces a downward LWSS...
Probably of no use but curious.
For backward rakes:
Code: Select all
./gencols -pat obj/lwss_s.life obj/glider_se.life -nph 4 -tc 20 23 -gen 100 -del1 -filt p -leq 0 | ./makematrix
Code: Select all
#P 0 0
............*.*.
...........*.
...........*.
...........*..*.
..*........***.
*.*.
.**.
#P 50 0
...........*.*.
..........*.
.*........*.
..*.......*..*.
***.......***.
#P 100 0
............*.*.
...........*.
...........*.
...........*..*.
*.*........***.
.**.
.*.
Code: Select all
./gencols -pat obj/lwss_s.life obj/glider_ne.life -nph 4 -tc 20 23 -gen 100 -del1 -filt p -leq 0 | ./makematrix
Code: Select all
#P 0 0
...........*.*.
..........*.
..........*.
..........*..*.
..........***.
.
.
.
.
.
.
.
.
.
**.
.**.
*.
#P 50 0
............*.*.
...........*.
...........*.
...........*..*.
...........***.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.*.
.**.
*.*.
Ivan Fomichev
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
how would I search for pi collisions that cleanly delete the blinkers behind the pies?
Re: gencols: techniques
I replaced pi_g136.life with
and ran the same search
Then I sorted results by population and took some first ones:
Here is the result (duplicates removed):
Probably it would make sense to increase -genafter a little bit in this case. It might be interesting also to analyse results of this search to find reactions that change the distance between pi tracks.
Code: Select all
.
.***
.
.
.
.
.
.
.
.
.
.
.
.
..*
.***
**.**
Code: Select all
./gencols -pat pi.life pi.life -nph 45 -tc 2 91 -gen 136 -test1 pi_g136.life -test2 pi_g136.life -genafter 50 -filt ap >result.col
Code: Select all
sort -nk3 result.col | head -30 | ./makematrix -space 200 >result.life
Code: Select all
x = 239, y = 483, rule = B3/S23
2bo199bo$2bo199bo$2bo199bo4$225bo$28b3o194bo$225bo10$b3o197b3o5$29bo$
29bo194b3o$29bo9$2bo199bo$2bo199bo$2bo199bo4$225bo$28b3o194bo$225bo10$
b3o197b3o5$29bo$29bo194b3o$29bo4$225bo$29bo194b3o$2bo26bo172bo20bo3bo$
b3o24bobo170b3o21bo$2ob2o195b2ob2o16bo3bo3bo$25b2ob3ob2o182b2o3bo7bo3b
2o$22bob2obo3bob2obo179b2o3bob5obo3b2o$21b5obo3bob5o177bo6bob3obo6bo$
22b2o2bo5bo2b2o179b2o15b2o$26b2o3b2o183b5o9b5o$21bo2bo2bo3bo2bo2bo182b
o9bo$26bobobobo186bo2b2o3b2o2bo$22bo3b2o3b2o3bo182b2ob2o3b2ob2o$26bo5b
o187bo2bo3bo2bo$25bo7bo187b2o5b2o123$202bo$202bo$202bo10$223b3o6$201b
3o10$224bo$224bo$224bo4$202bo$202bo$202bo10$223b3o6$201b3o10$224bo$
224bo$224bo$202bo$201b3o$200b2ob2o9$223b3o$222bo3bo$222b2ob2o122$2bo
199bo$2bo199bo$2bo199bo4$224bo$224bo$224bo3$29bo$29bo$29bo5$b3o197b3o
6$223b3o5$28b3o5$2bo199bo$2bo199bo$2bo199bo4$224bo$224bo$224bo3$29bo$
29bo$29bo5$b3o197b3o2$224bo$223bobo$222bo3bo$222bo3bo4$223b3o$220bob5o
bo$28b3o189b9o$221bo5bo$2bo199bo$b3o197b3o$2ob2o195b2ob2o$213b2o19b2o$
28b3o182bo2bob4o5b4obo2bo$28b3o183bo2bob5ob5obo2bo$28b3o186bo3b3ob3o3b
o$26bo5bo179bo7bo7bo7bo$24b3o5b3o175b2o6bob4ob4obo6b2o$20b3o6bo6b3o
171bo6bobob3ob3obobo6bo$20bo7b3o7bo172b3o21b3o$20b3o2bob2ob2obo2b3o
173b2o21b2o$25b4ob4o179bo21bo$23b2ob2o3b2ob2o2$24b2o7b2o$25b2o5b2o$26b
o5bo!
Ivan Fomichev
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
... this doesn't show all solutions! There are some pi rakes, where the glider collides with one of the blinker trails to clenly destroy it. The en cap of teh caterpillar uses one of these.
The question is whether there is a shorter end cap for the caterpillar.
One more complex idea would be a double pi trail that creates a blinker trail on which a pi travels the sdestroy the two original trails.
The question is whether there is a shorter end cap for the caterpillar.
One more complex idea would be a double pi trail that creates a blinker trail on which a pi travels the sdestroy the two original trails.
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
is there a possibility to filter out the blinker trails of a specific width in the gencols results?
Re: gencols: techniques
I believe there is no trivial way. Usually I write quick-and-dirty Golly scripts for tasks like this. I've written a bunch of utility functions, that appeared to be quite useful, such as finding a subpattern. In this particular case I would probably find all blinkers, compare their x-coordinates pairwise and write the results in a file.HartmutHolzwart wrote:is there a possibility to filter out the blinker trails of a specific width in the gencols results?
Ivan Fomichev
-
- Posts: 841
- Joined: June 27th, 2009, 10:58 am
- Location: Germany
Re: gencols: techniques
again I seem to be too dumb to use gencols!
How would I find all ways of stacking two 17c/45 pies on the same trail?
How would I find all ways of stacking two 17c/45 pies on the same trail?
Re: gencols: techniques
It seems an overkill to use gencols in this case, but why not...
pi.life
pi_g136.life
pi2.life
pi2_g136.life
Here are the results:
pi.life
Code: Select all
..*
..*
..*
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.***
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..*
..*
..*
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.***
.
.
.
.
.
.
.
.
.
.
.
.
..*
.***
**.**
Code: Select all
.
.***
.
.
.
.
.
.
.
.
.
.
.
.
..*
.***
**.**
Code: Select all
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..*
.***
**.**
Code: Select all
..*
.***
**.**
Code: Select all
./gencols -pat pi2.life pi.life -nph 90 -tc 30 35 -gen 136 -test1 pi2_g136.life -test2 pi_g136.life -filt ap >result.col
Code: Select all
x = 429, y = 373, rule = B3/S23
9b3o97b3o97b3o96b3o97b3o16$10bo99bo99bo98bo99bo$10bo99bo99bo98bo99bo$
10bo99bo99bo98bo99bo16$9b3o97b3o97b3o96b3o97b3o7$308b3o97b3o$109b3o97b
3o197bo$9b3o198bo97bobo96b2ob2o$10bo98bobo194bo5bo91b11o$104b3o2bobo2b
3o188b3obob3o87b2o4bobobo4b2o$4b3o7b3o185b2ob11ob2o82b3obo7bob3o83bo5b
o3bo5bo$3bobo3b3o3bobo84b2o3bob3obo3b2o83b2ob2obobobob2ob2o81bobo4bobo
bo4bobo82bo15bo$3bo13bo84bo4bo5bo4bo82bo4bo7bo4bo87bobobo90b2ob3o3b3ob
2o$3b2ob2o5b2ob2o84b2o2b2o5b2o2b2o83bo3bob2ob2obo3bo82b4o2b5o2b4o87bo
2bobo2bo$5bo3bobo3bo91bo5bo90b2o2bo3bo2b2o85b2o4bobo4b2o88b2obobob2o$
5b3o5b3o89b3o5b3o88b2ob2o3b2ob2o85b5o5b5o88b2o5b2o$105b2o7b2o188b3o5b
3o90b3o3b3o4$104bo11bo86b2o11b2o82bo17bo$3b3o3b3o3b3o85bobo3b3o3bobo
83bo3bo3b3o3bo3bo80bo2b2o3b3o3b2o2bo82b2o5b3o5b2o$o2b3o9b3o2bo79bob2ob
o9bob2obo79b2o3bo9bo3b2o81b3o9b3o83bo3bo9bo3bo$o19bo79bo3bo11bo3bo79b
2ob2o11b2ob2o79bo17bo82bobo11bobo$o19bo79bo19bo179bo17bo5$7bobobobo$9b
obo$6bo2bobo2bo$6bo7bo2$10bo99bo99bo98bo99bo$9b3o97b3o97b3o96b3o97b3o$
8b2ob2o95b2ob2o95b2ob2o94b2ob2o95b2ob2o28$8b3o98b3o98b3o98b3o98b3o16$
9bo100bo100bo100bo100bo$9bo100bo100bo100bo100bo$9bo100bo100bo100bo100b
o16$8b3o98b3o98b3o98b3o98b3o3$413bo$211bo100bo99b3o$110bo99bobo97b2ob
2o96bo3bo$8b3o98b3o98bobo97b2ob2o96b2ob2o$8b3o97bo3bo97bobo$8b3o99bo$
6bo5bo93bo3bo3bo193bo7bo87bo17bo$4b3o5b3o86b2o3bo7bo3b2o82b2o2b3o5b3o
2b2o81b3o2bo9bo2b3o79b4o2b2o7b2o2b4o$3o6bo6b3o82b2o3bob5obo3b2o81bobo
2b2o7b2o2bobo79b2o3bobo7bobo3b2o77bob3o2b2o7b2o2b3obo$o7b3o7bo81bo6bob
3obo6bo79b2o6bo5bo6b2o77b2ob2o3bo7bo3b2ob2o75b3o3b2o2bo5bo2b2o3b3o$3o
2bob2ob2obo2b3o82b2o15b2o81b2ob3o9b3ob2o79b2ob6o5b6ob2o77bo5bo2bo5bo2b
o5bo$5b4ob4o87b5o9b5o82b3o2bo7bo2b3o81bo2bo13bo2bo79b5o3bo5bo3b5o$3b2o
b2o3b2ob2o89bo9bo87bo3b2o5b2o3bo83b2o15b2o81b2ob2o11b2ob2o$104bo2b2o3b
2o2bo87b2o2b2o3b2o2b2o85bo4bo5bo4bo83bo2bo11bo2bo$4b2o7b2o89b2ob2o3b2o
b2o87bo2b2obobob2o2bo85bo3bo7bo3bo84b2o13b2o$5b2o5b2o91bo2bo3bo2bo89bo
2b2o3b2o2bo88bo3bo3bo3bo$6bo5bo93b2o5b2o91b3o5b3o90b3o5b3o91bo7bo$307b
2o7b2o91bo7bo3$8b3o98b3o98b3o98b3o98b3o13$9bo100bo100bo100bo100bo$8b3o
98b3o98b3o98b3o98b3o$7b2ob2o96b2ob2o96b2ob2o96b2ob2o96b2ob2o28$13b3o
96b3o97b3o98b3o97b3o16$14bo98bo99bo100bo99bo$14bo98bo99bo100bo99bo$14b
o98bo99bo100bo99bo13$414bo$314bo98b3o$212b3o98b3o96bo3bo$13b3o96b3o97b
3o96b2obob2o93bobobobo$113bo97bobobo95b2o3b2o92b3o3b3o$13bobo95b2ob2o
94b2o3b2o94bobobobo92b2o5b2o$13bobo95b2ob2o94b3ob3o97bo96bo2bo2bo$12bo
3bo193b3ob3o92b3o5b3o90b2obobob2o$12bo3bo93bo5bo93bo5bo92b3o5b3o91b2o
3b2o$12b2ob2o93b3ob3o93b2o3b2o93bobo3bobo$210b2o3b2o92b3o5b3o$207bo11b
o88b3o7b3o88bo9bo$105b4o9b4o85b2o9b2o90bo7bo90bo9bo$10bo7bo85b5o9b5o
79b2o5bo7bo5b2o78bo21bo77bo4b3o7b3o4bo$2bob6obo5bob6obo75bob5o9b5obo
76bob4o13b4obo76bobo3b2o9b2o3bobo76b2o3b2o9b2o3b2o$3ob6o9b6ob3o71b2o8b
2o3b2o8b2o75bob4o3bo3bo3b4obo78b2o3b2o2bo3bo2b2o3b2o78b2obobobo5bobobo
b2o$2bo2bo2b5o3b5o2bo2bo73b2o7bo2bobo2bo7b2o73bobo3b2o4bobo4b2o3bobo
75b3o3b2obobobobob2o3b3o77b2ob2o3b2ob2o3b2ob2o$2bobo4bobo5bobo4bobo74b
o7b3o3b3o7bo74b2o7bobo3bobo7b2o73b5o3bo11bo3b5o75b2o2bo4bobo4bo2b2o$3b
o21bo76b2o19b2o75b2obo5b3o3b3o5bob2o74b4o4b2ob2ob2ob2o4b4o72b2o2b3o2bo
3bobo3bo2b3o2b2o$4b3obo11bob3o77b2o19b2o77bobo17bobo77b2obo5bo5bo5bob
2o74b3obo3bo2bo3bo2bo3bob3o$5b3o13b3o80bo17bo80bo19bo79b2o19b2o76b3o6b
o5bo6b3o$403bo21bo5$13b3o96b3o97b3o98b3o97b3o13$14bo98bo99bo100bo99bo$
13b3o96b3o97b3o98b3o97b3o$12b2ob2o94b2ob2o95b2ob2o96b2ob2o95b2ob2o28$
13b3o16$14bo$14bo$14bo12$14bo$13bobo$12bo3bo$12bo3bo4$13b3o$10bob5obo$
10b9o$11bo5bo4$3b2o19b2o$3bo2bob4o5b4obo2bo$4bo2bob5ob5obo2bo$7bo3b3ob
3o3bo$2bo7bo7bo7bo$2o6bob4ob4obo6b2o$o6bobob3ob3obobo6bo$b3o21b3o$2b2o
21b2o$3bo21bo4$13b3o13$14bo$13b3o$12b2ob2o!
Ivan Fomichev