Stephen Wolfram Blog https://writings.stephenwolfram.com Stephen Wolfram's Personal Blog Mon, 24 Aug 2020 23:07:56 +0000 en-US hourly 1 http://wordpress.org/?v=3.4.2 <![CDATA[A Burst of Physics Progress at the 2020 Wolfram Summer School]]> https://writings.stephenwolfram.com/2020/07/a-burst-of-physics-progress-at-the-2020-wolfram-summer-school/ https://writings.stephenwolfram.com/2020/07/a-burst-of-physics-progress-at-the-2020-wolfram-summer-school/#comments Fri, 31 Jul 2020 23:12:07 +0000 Stephen Wolfram https://writings.internal.stephenwolfram.com/?p=25198 WSSthumbnailAnd We’re Off and Running… We recently wrapped up the four weeks of our first-ever “Physics track” Wolfram Summer School—and the results were spectacular! More than 30 projects potentially destined to turn into academic papers—reporting all kinds of progress on the Wolfram Physics Project. When we launched the Wolfram Physics Project just three months ago [...]]]> WSSthumbnail

A Burst of Physics Progress at the 2020 Wolfram Summer School

And We’re Off and Running…

We recently wrapped up the four weeks of our first-ever “Physics track” Wolfram Summer School—and the results were spectacular! More than 30 projects potentially destined to turn into academic papers—reporting all kinds of progress on the Wolfram Physics Project.

When we launched the Wolfram Physics Project just three months ago one of the things I was looking forward to was seeing other people begin to seriously contribute to the project. Well, it turns out I didn’t have to wait long! Because—despite the pandemic and everything—things are already very much off and running!

Six weeks ago we made a list of questions we thought we were ready to explore in the Wolfram Physics Project. And in the past five weeks I’m excited to say that through projects at the Summer School lots of these are already well on their way to being answered. If we ever wondered whether there was a way for physicists (and physics students) to get involved in the project, we can now give a resounding answer, “yes”.

So what was figured out at the Summer School? I’m not going to get even close to covering everything here; that’ll have to await the finishing of papers (that I’ll be most interested to read!). But I’ll talk here about a few things that I think are good examples of what was done, and on which I can perhaps provide useful commentary.

I should explain that we’ve been doing our Wolfram Summer School for 18 years now (i.e. since just after the 2002 publication of A New Kind of Science), always focusing on having each student do a unique original project. This year—for the first time—we did the Summer School virtually, with 79 college/graduate/postdoc/… students from 21 countries around the world (and, yes, 13 time zones). We had 30 students officially on the “Physics track”, but at least 35 projects ended up being about the Wolfram Physics Project. (Simultaneous with the last two weeks of the Summer School we also had our High School Summer Camp, with another 44 students—and several physics projects.)

My most important role in the Summer School (and Summer Camp) is in defining projects. For the Physics track Jonathan Gorard was the academic director, assisted by some very able mentors and TAs. Given how new the Wolfram Physics Project is, there aren’t many people who yet know it well, but one of the things we wanted to achieve at the Summer School was to fix that!

Nailing Down Quantum Mechanics

One of the remarkable features of our models is that they basically imply the inevitability of quantum mechanics. But what is the precise correspondence between our models and all the traditional formalism of quantum mechanics? Some projects at the Summer School helped the ongoing process of nailing that down.

The starting point for any discussion of quantum mechanics in our models is the notion of multiway systems, and the concept that there can be many possible paths of evolution, represented by a multiway graph. The nodes in the multiway graph represent quantum (eigen)states. Common ancestry among these states defines entanglements between them. The branchial graph then in effect gives a map of the entanglements of quantum states—and in the large-scale limit one can think of this as corresponding to a “branchial space”:

Branchial graph

Branchial graph

The full picture of multiway systems for transformations between hypergraphs is quite complicated. But a key point that has become increasingly clear is that many of the core phenomena of quantum mechanics are actually quite generic to multiway systems, independent of the details of the underlying rules for transitions between states. And as a result, it’s possible to study quantum formalism just by looking at string substitution systems, without the full complexity of hypergraph transformations.

A quantum state corresponds to a collection of nodes in the multiway graph. Transitions between states through time can be studied by looking at the paths of bundles of geodesics through the multiway graph from the nodes of one state to another.

In traditional quantum formalism different states are assigned quantum amplitudes that are specified by complex numbers. One of our realizations has been that this “packaging” of amplitudes into complex numbers is quite misleading. In our models it’s much better to think about the magnitude and phase of the amplitude separately. The magnitude is obtained by looking at path weights associated with multiplicity of possible paths that reach a given state. The phase is associated with location in branchial space.

One of the most elegant results of our models so far is that geodesic paths in branchial space are deflected by the presence of relativistic energy density represented by the multiway causal graph—and therefore that the path integral of quantum mechanics is just the analog in branchial space of the Einstein equations in physical space.

To connect with the traditional formalism of quantum mechanics we must discuss how measurement works. The basic point is that to obtain a definite “measured result” we must somehow get something that no longer shows “quantum branches”. Assuming that our underlying system is causal invariant, this will eventually always “happen naturally”. But it’s also something that can be achieved by the way an observer (who is inevitably themselves embedded in the multiway system) samples the multiway graph. And as emphasized by Jonathan Gorard this is conveniently parametrized by thinking of the observer as effectively adding certain “completions” to the transition rules used to construct the multiway system.

It looks as if it’s then straightforward to understand things like the Born rule for quantum probabilities. (To project one state onto another involves a “rectangle” of transformations that have path weights corresponding to the product of those for the sides.) It also seems possible to understand things like destructive interference—essentially as the result of geodesics for different cases landing up at sufficiently distant points in branchial space that any “spanning completion” must pull in a large number of “randomly canceling” path weights.

Local versus Global Multiway Systems

A standard “global” multiway system works by merging branches that lead to globally isomorphic hypergraphs. In Jonathan Gorard’s “completion interpretation of quantum mechanics”, some of these merges represent the results of applying rules that effectively get “added by the observer” as part of their interpretation of the universe. Max Piskunov has criticized the need to consider global hypergraph isomorphism (“Is one really going to compare complete universes?”)—and has suggested instead the idea of local multiway systems. He got the first implementation of local multiway systems done just in time for the Summer School.

Consider the rule:

{{x, y}, {x, z}} {{x, z}, {x, w}, {y, w}, {z, w}}

Start from the initial state {{{1,1},{1,1}}}. Here’s its global multiway graph, showing both states and events:

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][
 "WolframModel" -> {{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
      w}}}, {{{1, 1}, {1, 1}}}, 3, "EvolutionEventsGraph", 
 VertexSize -> 1]

But now imagine that we trace the fate of every single relation in each hypergraph, and show it as a separate node in our graph. What we get then is a local multiway system. In this case, here are the first few steps:

ResourceFunction
&#10005

ResourceFunction[
   "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
     w}}, Automatic, 3]["ExpressionsEventsGraph", 
 VertexLabels -> Automatic]

Continue for a few more steps:

ResourceFunction
&#10005

ResourceFunction[
   "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
     w}}, Automatic, 5]["ExpressionsEventsGraph"]

If we look only at events, we get exactly the same causal graph as for the global multiway system:

ResourceFunction
&#10005

ResourceFunction[
   "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
     w}}, Automatic, 5]["LayeredCausalGraph"]

But in the full local multiway graph every causal edge is “annotated” with the relation (or “expression”) that “carries” causal information between events.

In general, two events can be timelike, spacelike or branchlike separated. A local multiway system provides a definite criterion for distinguishing these. When two events are timelike separated, one can go from one to another by following a causal edge. When two events are spacelike separated, their most common ancestor in the local multiway system graph will be an event. But if they are branchlike separated, it will instead be an expression.

To reconstruct “complete states” (i.e. spatial hypergraphs) of the kind used in the global multiway system, one needs to assemble maximal collections of expressions that are spacelike separated (“maximal antichains” in poset jargon).

But so is the “underlying physics” of local multiway systems the same as global ones? In a global multiway system one talks about applying rules to the collections of expressions that exist in spatial hypergraphs. But in a local multiway system one just applies rules to arbitrary collections of expressions (or relations). And a big difference is that the expressions in these collections can lie not just at different places in a spatial hypergraph, but on different multiway branches. Or, in other words, the evolution of the universe can pick pieces from different potential “branches of history”.

This might sound like it’d lead to completely different results. But the remarkable thing is that it doesn’t—and instead global and multiway systems just seem to be different descriptions of what is ultimately the same thing. Let’s assume first that the underlying rules are causal invariant. Then in a global multiway system, branches must always reconverge. But this reconvergence means that even when there are states (and expressions) “on different branches” they can still be brought together into the same event, just like in a local multiway system. And when there isn’t immediately causal invariance, Jonathan’s “completion interpretation” posits that observers in effect add completions which lead to effective causal invariance, with the same reconvergence, and effective involvement of different branches in single events.

As Jonathan and Max debated global vs. local multiway systems I joked that it was a bit like Erwin Schrödinger debating Werner Heisenberg in the early days of quantum mechanics. And then we realized: actually it was just like that! Recall that in the Schrödinger picture of quantum mechanics, time evolution operators are fixed, but states evolve, whereas in the Heisenberg picture, states are fixed, but evolution operators evolve. Well, in a global multiway system one’s looking at complete states and seeing how they change as a result of the fixed set of events defined by the rules. But in a local multiway system one has a fixed basis of expressions, and then one’s looking at how the structure of the events that involve these expressions changes. So it’s just like the Schrödinger vs. Heisenberg pictures!

The Concept of Multispace

Right before the Summer School, I’d been doing quite a lot of work on what I was calling “multispace”. In a spatial hypergraph one’s representing the spatial relationships between elements. In a global multiway system one’s representing the branchial relationships between complete states. In a local multiway system spatial and branchial relationships are effectively mixed together.

So what is the analog of physical space when branchial relationships are included? I’m calling it multispace. In a case where there isn’t any branching—say an ordinary, deterministic Turing machine—multispace is just the same as ordinary space. But if there’s branching, it’s different.

Here’s an experiment I did just before the Summer School in the very simple case of a non-deterministic Turing machine:

Non-deterministic Turing machine

But I wasn’t really happy with this visualization; the most obvious structure is still the multiway system, and there are lots of “copies of space”, appearing in different states. What I wanted to figure out was how to visualize things so that ordinary space is somehow primary, and the branching is secondary. One could imagine that the elements of the system are basically laid out according to the relationships in ordinary space, merely “bulging out” in a different direction to represent branchial structure.

The practical problem is that branchial space may usually be much “bigger” than ordinary space, so the “bulging” may in effect “overpower” the ordinary spatial relationships. But one idea for visualizing multispace—explored by Nikolay Murzin at the Summer School—is to use machine-learning-like methods to create a 3D layout that shows spatial structure when viewed from one direction, and branchial structure when viewed from an orthogonal direction:

ResourceFunction
&#10005

ResourceFunction["MultispacePlot3D"][
 ResourceFunction["MultiwayTuringMachine"][{1507, 2506, 
    3506}, {{1, 1, 0}, {0, 1, 0, 1}}, 4, ##] &, "Graph"]

Generational States, the Ontological Basis and Bohmian Mechanics

In our models, multiway graphs represent all possible “quantum paths of evolution” for a system. But is there a way to pick out at least an approximation to a “classical-like path”? Yes–it’s a path consisting of a sequence of what we call “generational states”. And in going from one generational state to another, the idea is to carry out not just one event, as in the multiway graph, but a maximal set of spacelike separated events. In other words, instead of allowing different “quantum branches” containing different orderings of events, we’re insisting that a maximal set of consistent events are all done together.

Here’s an example. Consider the rule:

{A AB, B BBA}

Here’s a “classical-like path” made from generational states:

ResourceFunction
&#10005

ResourceFunction["GenerationalMultiwaySystem"][{"A" -> "AB", 
  "B" -> "BBA"}, "AA", 3, "StatesGraph"]

These states must appear in the multiway graph, though it typically takes several events (i.e. several edges) to go from one to another (and in general there may be multiple “generational paths”, corresponding to multiple possible “classical-like paths” in a system):

stripMetadata
&#10005

stripMetadata[expression_] := 
 If[Head[expression] === Rule, Last[expression], expression]; Graph[
 ResourceFunction["MultiwaySystem"][{"A" -> "AB", 
   "B" -> "BBA"}, {"AA"}, 3, "StatesGraph"], 
 VertexShapeFunction -> {Alternatives @@ 
     VertexList[
      ResourceFunction["GenerationalMultiwaySystem"][{"A" -> "AB", 
        "B" -> "BBA"}, {"AA"}, 3, "StatesGraph"]] -> (Text[
       Framed[Style[stripMetadata[#2], Hue[0, 1, 0.48]], 
        Background -> Directive[Opacity[.6], Hue[0, 0.45, 0.87]], 
        FrameMargins -> {{2, 2}, {0, 0}}, RoundingRadius -> 0, 
        FrameStyle -> 
         Directive[Opacity[0.5], 
          Hue[0, 0.52, 0.8200000000000001]]], #1, {0, 0}] &)}]

But what is the interpretation of generational states in previous discussions of quantum mechanics? Joseph Blazer’s project at the Summer School suggested that they are like an ontological basis.

In the standard formalism used for quantum mechanics one imagines that there are lots of quantum states that can form superpositions, etc.—and that classical results emerge only when measurements are done. But even from the earliest days of quantum mechanics (and rediscovered in the 1950s) there is an alternative formalism: so-called Bohmian mechanics, in which everything one considers is a “valid classical state”, but in which there are more elaborate rules of evolution than in the standard formalism.

Well, it seems as if generational states are just what Bohmian mechanics is talking about. The set of possible generational states can be thought of as forming an “ontological basis”, of states that “really can exist”, without any “quantum funny business”.

But what is the rule for evolution between generational states? One of the perhaps troubling features of Bohmian mechanics is that it implies correlations between spacelike separated events, or in other words, it implies that effects can propagate at arbitrarily high speeds.

But here’s the interesting thing: that’s just what happens in our generational states too! In our generational states, though, it isn’t some strange effect that seems to be arbitrarily added to the system: it’s simply a consequence of the consistency conditions we choose to impose in defining generational states.

Classic Quantum Systems and Effects

An obvious check on our models is to see them reproduce classic quantum systems and effects—and several projects at the Summer School were concerned with this. A crucial point (that I mentioned above) is that it’s becoming increasingly clear that at least most of these “classic quantum systems and effects” are quite generic features of our models—and of the multiway systems that appear in them. And this meant that many of the “quantum” projects at the Summer School could be done just in terms of string substitution systems, without having to deal with all the complexities of hypergraph rewriting.

Quantum Interference

Hatem Elshatlawy, for example, explored quantum interference in our models. He got some nice results—which Jonathan Gorard managed to simplify to an almost outrageous extent.

Let’s imagine just having a string in which o represents “empty space”, and X represents the position of some quantum thing, like a photon. Then let’s have a simple sorting rule that represents the photon going either left or right (a kind of minimal Huygens’ principle):

{Xo oX, oX Xo}

Now let’s construct a multiway system starting from a state “oooXooXooo” that we can think of as corresponding to photons going through two “slits” a certain distance apart:

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][{"Xo" -> "oX", 
  "oX" -> "Xo"}, "oooXooXooo", 2, "StatesGraph", 
 "IncludeStepNumber" -> True, "IncludeStateWeights" -> True, 
 VertexLabels -> "VertexWeight", 
 GraphLayout -> "LayeredDigraphEmbedding"]

The merging of states that we see here is ultimately going to correspond to “quantum interference”. The path weights correspond to the magnitudes of the amplitudes of different states. But the question is: “What final state corresponds to what final photon position?”

Different final photon positions effectively correspond to different quantum phases for the photon. But in our models these quantum phases are associated with positions in branchial space. And to get an idea of what’s going on, we can just use the sorting order of strings to give a sense of relative positions in branchial space. (Because of the details of the setup, we need to just use the right-hand half of the strings, then symmetrically repeat them.)

If we now do this, and plot the values of the weights (here after 6 steps) this is what we get:

MultiwayDiffractionTest
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"MultiwayDiffractionTest", "[", 
   RowBox[{
   "rules_List", ",", "initialCondition_String", ",", 
    "stepCount_Integer"}], "]"}], ":=", 
  RowBox[{"Module", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
     "allStatesList", ",", "finalStatesCount", ",", "weights", ",", 
      "sortedWeights"}], "}"}], ",", "\[IndentingNewLine]", 
    RowBox[{
     RowBox[{"allStatesList", "=", 
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", "\"\<MultiwaySystem\>\"", "]"}], "[", 
       
       RowBox[{
       "rules", ",", "initialCondition", ",", "stepCount", ",", 
        "\"\<AllStatesList\>\"", ",", 
        RowBox[{"\"\<IncludeStateWeights\>\"", "\[Rule]", "True"}], 
        ",", 
        RowBox[{"VertexLabels", "\[Rule]", "\"\<VertexWeight\>\""}], 
        ",", 
        RowBox[{"\"\<IncludeStepNumber\>\"", "\[Rule]", "True"}]}], 
       "]"}]}], ";", "\[IndentingNewLine]", 
     RowBox[{"finalStatesCount", "=", 
      RowBox[{"Length", "[", 
       RowBox[{"Last", "[", "allStatesList", "]"}], "]"}]}], ";", 
     "\[IndentingNewLine]", 
     RowBox[{"weights", "=", 
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", "\"\<MultiwaySystem\>\"", "]"}], "[", 
       
       RowBox[{
       "rules", ",", "initialCondition", ",", "stepCount", ",", 
        "\"\<StateWeights\>\"", ",", 
        RowBox[{"\"\<IncludeStateWeights\>\"", "\[Rule]", "True"}]}], 
       "]"}]}], ";", "\[IndentingNewLine]", 
     RowBox[{"sortedWeights", "=", 
      RowBox[{"Join", "[", 
       RowBox[{
        RowBox[{"Reverse", "[", 
         RowBox[{"Take", "[", 
          RowBox[{"weights", ",", 
           RowBox[{"-", 
            RowBox[{"Ceiling", "[", 
             RowBox[{"finalStatesCount", "/", "2"}], "]"}]}]}], "]"}],
          "]"}], ",", 
        RowBox[{"Take", "[", 
         RowBox[{"weights", ",", 
          RowBox[{"-", 
           RowBox[{"Ceiling", "[", 
            RowBox[{"finalStatesCount", "/", "2"}], "]"}]}]}], 
         "]"}]}], "]"}]}], ";", "\[IndentingNewLine]", 
     RowBox[{"Last", "/@", "sortedWeights"}]}]}], "]"}]}]], "Input"],
 
 Cell[BoxData[
 RowBox[{"ListLinePlot", "[", 
  RowBox[{
   RowBox[{"MultiwayDiffractionTest", "[", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{
       RowBox[{"\"\<Xo\>\"", "\[Rule]", "\"\<oX\>\""}], ",", 
       RowBox[{"\"\<oX\>\"", "\[Rule]", "\"\<Xo\>\""}]}], "}"}], ",", 
     " ", "\"\<oooXooXooo\>\"", ",", "6"}], "]"}], ",", 
   RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
   RowBox[{"Frame", "\[Rule]", "True"}], ",", 
   RowBox[{"Filling", "\[Rule]", "Axis"}], ",", 
   RowBox[{"FillingStyle", "->", "LightYellow"}]}], "]"}]], "Input"]

Amazingly, this is starting to look a bit like a diffraction pattern. Let’s try “increasing the slit spacing”—by using the initial string “ooooooooXoooXoooooooo”. Now the multiway graph has the form

LayeredGraphPlot
&#10005

LayeredGraphPlot[
 ResourceFunction["MultiwaySystem"][{"Xo" -> "oX", "oX" -> "Xo"}, 
  "ooooooooXoooXoooooooo", 10, "EvolutionGraphStructure"]]

and plotting the weights we get

ListLinePlot
&#10005

ListLinePlot[
 MultiwayDiffractionTest[{"Xo" -> "oX", "oX" -> "Xo"}, 
  "ooooooooXoooXoooooooo", 10], Mesh -> All, Frame -> True, 
 Filling -> Axis, FillingStyle -> LightYellow]

which is stunningly similar to the standard quantum mechanics result

Plot
&#10005

Plot[((1/2)*ChebyshevU[1, Cos[x]]*Sinc[0.35*x])^2, {x, -10, 10}, 
 Filling -> Axis, FillingStyle -> LightYellow, Frame -> True]

complete with the expected destructive interference away from the central peak.

Computing the corresponding branchial graph we get

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][{"Xo" -> "oX", 
  "oX" -> "Xo"}, "ooooooooXoooXoooooooo", 10, \
"BranchialGraphStructure"]

which in effect shows the “concentrations of amplitude” into different parts of branchial space (AKA peaks in different regions of quantum phase).

(In a sense the fact that this all works is “unsurprising”, since in effect we’re just implementing a discrete version of Huygens’ principle. But it’s very satisfying to see everything come together.)

The Quantum Harmonic Oscillator

The quantum harmonic oscillator is one of the first kinds of quantum systems a typical quantum mechanics textbook will discuss. But how does the quantum harmonic oscillator work in our models? Patrick Geraghty’s project at the Summer School began the process of figuring it out.

A classical harmonic oscillator basically has something going back and forth in a certain region at a sequence of possible frequencies. The quantum harmonic oscillator picks up the same “modes”, but now represents them just as quantum eigenstates of a certain energy. In our models it’s actually possible to go back to something very close to the classical picture. We can set up a string substitution system in which something (here B or C) goes back and forth in a string of fixed length:

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][{"BA" -> "AB", "BY" -> "CY", 
  "AC" -> "CA", "XC" -> "XB"}, {"XBAAAY"}, 10, "StatesGraph"]

We can make it a bit more obvious what’s going on by changing the characters in the strings:

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][{"R-" -> "-R", "R]" -> "L]", 
  "-L" -> "L-", "[L" -> "[R"}, {"[R---]"}, 10, "StatesGraph"]

And it’s clear that this system will always go in a periodic cycle. If we were thinking about spacetime and relativity, it might trouble us that we’ve created a closed timelike curve, in which the future merges with the past. But that’s basically what we’re forced into by the idealization of a quantum harmonic oscillator.

Recall that in our models energy is associated with the flux of causal edges. Well, in this model of the harmonic oscillator, we can immediately figure out the causal edges:

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][{"R-" -> "-R", "R]" -> "L]", 
  "-L" -> "L-", "[L" -> "[R"}, {"[R---]"}, 10, "EvolutionCausalGraph"]

And we can see that as we change the length of the string, the number of causal edges (i.e. the energy) will linearly increase, as we’d expect for a quantum harmonic oscillator:

Table
&#10005

Table[ResourceFunction["MultiwaySystem"][{"R-" -> "-R", "R]" -> "L]", 
   "-L" -> "L-", "[L" -> "[R"}, {"[R" <> StringRepeat["-", n] <> "]"},
   10, "EvolutionCausalGraphStructure"], {n, 2, 4}]

Oh, and there’s even zero-point energy:

Table[ResourceFunction["MultiwaySystem"]
&#10005

Table[ResourceFunction["MultiwaySystem"][{"R-" -> "-R", "R]" -> "L]", 
   "-L" -> "L-", "[L" -> "[R"}, {"[R" <> StringRepeat["-", n] <> "]"},
   10, "EvolutionCausalGraphStructure"], {n, 0, 2, 4}]

There’s a lot more to figure out even about the quantum harmonic oscillator, but this is a start.

Quantum Teleportation

One of the strange, but characteristic, phenomena that’s known to occur in quantum mechanics is what’s called quantum teleportation. In a physical quantum teleportation experiment, one creates a quantum-entangled pair of particles, then lets them travel apart. But now as soon as one measures the state of one of these particles, one immediately knows something about the state of the other particle—even though there hasn’t been time to get a light signal from that other particle.

At the Summer School, Taufiq Murtadho figured out a rather elegant way to understand this phenomenon in our models. I’ll not go through the details here, but here’s a representation of a key part of the construction:

DrawGraph
&#10005

Cell[CellGroupData[{
						Cell[BoxData[{
 RowBox[{
  RowBox[{"rule", " ", "=", " ", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"\"\<D\>\"", "\[Rule]", " ", "\"\<AXA\>\""}], ",", 
     RowBox[{"\"\<D\>\"", "\[Rule]", " ", "\"\<BXB\>\""}], ",", 
     RowBox[{"\"\<C\>\"", "\[Rule]", " ", "\"\<A\>\""}], ",", 
     RowBox[{"\"\<C\>\"", "\[Rule]", " ", "\"\<B\>\""}]}], "}"}]}], 
  ";"}], "\[IndentingNewLine]", 
 RowBox[{
  RowBox[{"InitialState", " ", "=", "\"\<DC\>\""}], 
  ";"}], "\[IndentingNewLine]", 
 RowBox[{
  RowBox[{"BellCompletion", "=", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"\"\<BA\>\"", "\[Rule]", " ", "\"\<AA\>\""}], ",", " ", 
     RowBox[{"\"\<AA\>\"", "\[Rule]", " ", "\"\<BA\>\""}], ",", 
     RowBox[{"\"\<BA\>\"", "\[Rule]", " ", "\"\<BB\>\""}], ",", 
     RowBox[{"\"\<BB\>\"", "\[Rule]", " ", "\"\<BA\>\""}], ",", " ", 
     RowBox[{"\"\<AB\>\"", "\[Rule]", " ", "\"\<AA\>\""}], ",", 
     RowBox[{"\"\<AA\>\"", "\[Rule]", " ", "\"\<AB\>\""}], ",", " ", 
     RowBox[{"\"\<AB\>\"", "\[Rule]", " ", "\"\<BB\>\""}], ",", 
     RowBox[{"\"\<BB\>\"", "\[Rule]", " ", "\"\<AB\>\""}]}], "}"}]}], 
  ";"}]}], "Input"],

  Cell[BoxData[
 RowBox[{
  RowBox[{"(*", 
   RowBox[{
   "Function", " ", "to", " ", "draw", " ", "the", " ", "graph", " ", 
    "with", " ", "annotation"}], "*)"}], "\[IndentingNewLine]", 
  RowBox[{
   RowBox[{
    RowBox[{"DrawGraph", "[", "]"}], ":=", 
    RowBox[{"Module", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"a", ",", "b", ",", "c"}], "}"}], ",", 
      "\[IndentingNewLine]", 
      RowBox[{"(*", 
       RowBox[{
       "Selecting", " ", "the", " ", "vertices", " ", "to", " ", "be",
         " ", "colored"}], "*)"}], "\[IndentingNewLine]", 
      RowBox[{
       RowBox[{"EvolVertexList", " ", "=", " ", 
        RowBox[{"VertexList", "[", 
         RowBox[{
          RowBox[{
          "ResourceFunction", "[", "\"\<MultiwaySystem\>\"", "]"}], 
          "[", 
          RowBox[{
           RowBox[{"Join", "[", 
            RowBox[{"rule", ",", "BellCompletion"}], "]"}], ",", 
           "InitialState", ",", "4", ",", "\"\<EvolutionGraph\>\""}], 
          "]"}], "]"}]}], ";", "\[IndentingNewLine]", 
       RowBox[{"TeleportInitState", " ", "=", " ", 
        RowBox[{"FilterRules", "[", 
         RowBox[{"EvolVertexList", ",", "2"}], "]"}]}], ";", 
       "\[IndentingNewLine]", 
       RowBox[{"BellVertex1", " ", "=", 
        RowBox[{"Map", "[", 
         RowBox[{
          RowBox[{
           RowBox[{"3", "\[Rule]", " ", "#"}], "&"}], ",", 
          RowBox[{"Flatten", "[", 
           RowBox[{"StringCases", "[", 
            RowBox[{
             RowBox[{
              RowBox[{"FilterRules", "[", 
               RowBox[{"EvolVertexList", ",", "3"}], "]"}], "/.", 
              RowBox[{
               RowBox[{"Rule", "[", 
                RowBox[{"a_", ",", "b_"}], "]"}], "\[RuleDelayed]", 
               "b"}]}], ",", 
             RowBox[{"{", 
              RowBox[{
               RowBox[{"__", "~~", "\"\<AA\>\""}], ",", 
               RowBox[{"__", "~~", "\"\<BB\>\""}]}], "}"}]}], "]"}], 
           "]"}]}], "]"}]}], ";", "\[IndentingNewLine]", 
       RowBox[{"BellVertex2", " ", "=", 
        RowBox[{"Map", "[", 
         RowBox[{
          RowBox[{
           RowBox[{"3", "\[Rule]", " ", "#"}], "&"}], ",", 
          RowBox[{"Flatten", "[", 
           RowBox[{"StringCases", "[", 
            RowBox[{
             RowBox[{
              RowBox[{"FilterRules", "[", 
               RowBox[{"EvolVertexList", ",", "3"}], "]"}], "/.", 
              RowBox[{
               RowBox[{"Rule", "[", 
                RowBox[{"a_", ",", "b_"}], "]"}], "\[RuleDelayed]", 
               "b"}]}], ",", 
             RowBox[{"{", 
              RowBox[{
               RowBox[{"__", "~~", "\"\<AB\>\""}], ",", 
               RowBox[{"__", "~~", "\"\<BA\>\""}]}], "}"}]}], "]"}], 
           "]"}]}], "]"}]}], ";", "\[IndentingNewLine]", 
       RowBox[{
        RowBox[{"stripMetadata", "[", "expression_", "]"}], ":=", 
        RowBox[{"If", "[", 
         RowBox[{
          RowBox[{
           RowBox[{"Head", "[", "expression", "]"}], "===", "Rule"}], 
          ",", 
          RowBox[{"Last", "[", "expression", "]"}], ",", 
          "expression"}], "]"}]}], ";", "\[IndentingNewLine]", 
       RowBox[{"(*", 
        RowBox[{"Coloring", " ", "BellVertex1"}], "*)"}], 
       "\[IndentingNewLine]", 
       RowBox[{"a", " ", "=", 
        RowBox[{"Graph", "[", 
         RowBox[{
          RowBox[{
           RowBox[{
           "ResourceFunction", "[", "\"\<MultiwaySystem\>\"", "]"}], 
           "[", 
           RowBox[{
            RowBox[{"Join", "[", 
             RowBox[{"rule", ",", "BellCompletion"}], "]"}], ",", 
            "InitialState", ",", "3", ",", "\"\<EvolutionGraph\>\"", 
            ",", 
            RowBox[{
            "\"\<IncludeStatePathWeights\>\"", "\[Rule]", " ", 
             "True"}], ",", 
            RowBox[{
            "VertexLabels", "\[Rule]", " ", 
             "\"\<VertexWeight\>\""}]}], "]"}], ",", 
          InterpretationBox[
           DynamicModuleBox[{Typeset`open = False}, 
            TemplateBox[{"Expression", 
              RowBox[{"Rule", "[", 
                DynamicBox[
                 FEPrivate`FrontEndResource[
                 "FEBitmaps", "IconizeEllipsis"]], "]"}], 
              GridBox[{{
                 ItemBox[
                  RowBox[{
                    TagBox["\"Byte count: \"", "IconizedLabel"], 
                    "\[InvisibleSpace]", 
                    TagBox["1776", "IconizedItem"]}]]}}, 
               GridBoxAlignment -> {"Columns" -> {{Left}}}, 
               DefaultBaseStyle -> "Column", 
               GridBoxItemSize -> {
                "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}], 
              Dynamic[Typeset`open]},
             "IconizedObject"]],
           
           VertexShapeFunction -> {
            Apply[Alternatives, $CellContext`BellVertex1] -> (Text[
               Framed[
                Style[
                 $CellContext`stripMetadata[#2], 
                 Hue[0, 1, 0.1]], Background -> Directive[
                  Opacity[0.6], 
                  Hue[0, 0.45, 0.87]], 
                FrameMargins -> {{2, 2}, {0, 0}}, RoundingRadius -> 0,
                 FrameStyle -> Directive[
                  Opacity[0.5], 
                  Hue[0, 0.52, 0.8200000000000001]]], #, {0, 0}]& )},
           SelectWithContents->True,
           Selectable->False]}], "]"}]}], ";", "\[IndentingNewLine]", 
       
       RowBox[{"(*", 
        RowBox[{"Coloring", " ", "BellVertex2"}], "*)"}], 
       "\[IndentingNewLine]", 
       RowBox[{"b", " ", "=", " ", 
        RowBox[{"Graph", "[", 
         RowBox[{"a", ",", 
          RowBox[{"VertexShapeFunction", "\[Rule]", 
           RowBox[{"{", 
            RowBox[{
             RowBox[{"Alternatives", "@@", "BellVertex2"}], "\[Rule]", 
             RowBox[{"(", 
              RowBox[{
               RowBox[{"Text", "[", 
                RowBox[{
                 RowBox[{"Framed", "[", 
                  RowBox[{
                   RowBox[{"Style", "[", 
                    RowBox[{
                    RowBox[{"stripMetadata", "[", "#2", "]"}], ",", 
                    RowBox[{"Hue", "[", 
                    RowBox[{"0", ",", "1", ",", "0.1"}], "]"}]}], 
                    "]"}], ",", "\[IndentingNewLine]", 
                   RowBox[{"Background", "\[Rule]", 
                    RowBox[{"Directive", "[", 
                    RowBox[{
                    RowBox[{"Opacity", "[", ".6", "]"}], ",", 
                    RowBox[{"Hue", "[", 
                    RowBox[{
                    RowBox[{"1", "/", "3"}], ",", "1", ",", "1", ",", 
                    ".5"}], "]"}]}], "]"}]}], ",", 
                   InterpretationBox[
                    DynamicModuleBox[{Typeset`open = False}, 
                    TemplateBox[{"Expression", "SequenceIcon", 
                    GridBox[{{
                    ItemBox[
                    RowBox[{
                    TagBox["\"Head: \"", "IconizedLabel"], 
                    "\[InvisibleSpace]", 
                    TagBox["Sequence", "IconizedItem"]}]]}, {
                    ItemBox[
                    RowBox[{
                    TagBox["\"Length: \"", "IconizedLabel"], 
                    "\[InvisibleSpace]", 
                    TagBox["3", "IconizedItem"]}]]}, {
                    ItemBox[
                    RowBox[{
                    TagBox["\"Byte count: \"", "IconizedLabel"], 
                    "\[InvisibleSpace]", 
                    TagBox["712", "IconizedItem"]}]]}}, 
                    GridBoxAlignment -> {"Columns" -> {{Left}}}, 
                    DefaultBaseStyle -> "Column", 
                    GridBoxItemSize -> {
                    "Columns" -> {{Automatic}}, 
                    "Rows" -> {{Automatic}}}], 
                    Dynamic[Typeset`open]},
                    "IconizedObject"]],
                    Sequence[
                    FrameMargins -> {{2, 2}, {0, 0}}, RoundingRadius -> 
                    0, FrameStyle -> Directive[
                    Opacity[0.5], 
                    Hue[0, 0.1, 0.8200000000000001]]],
                    SelectWithContents->True,
                    Selectable->False]}], "]"}], ",", "#1", ",", 
                 RowBox[{"{", 
                  RowBox[{"0", ",", "0"}], "}"}]}], "]"}], "&"}], 
              ")"}]}], "}"}]}]}], "]"}]}], ";", "\[IndentingNewLine]", 
       RowBox[{"(*", 
        RowBox[{
        "Coloring", " ", "the", " ", "initial", " ", "teleportation", 
         " ", "state"}], "*)"}], "\[IndentingNewLine]", 
       RowBox[{"c", " ", "=", " ", 
        RowBox[{"Graph", "[", 
         RowBox[{"b", ",", 
          RowBox[{"VertexShapeFunction", "\[Rule]", 
           RowBox[{"{", 
            RowBox[{
             RowBox[{"Alternatives", "@@", "TeleportInitState"}], 
             "\[Rule]", 
             RowBox[{"(", 
              RowBox[{
               RowBox[{"Text", "[", 
                RowBox[{
                 RowBox[{"Framed", "[", 
                  RowBox[{
                   RowBox[{"Style", "[", 
                    RowBox[{
                    RowBox[{"stripMetadata", "[", "#2", "]"}], ",", 
                    RowBox[{"Hue", "[", 
                    RowBox[{"0", ",", "1", ",", "0.1"}], "]"}]}], 
                    "]"}], ",", "\[IndentingNewLine]", 
                   InterpretationBox[
                    DynamicModuleBox[{Typeset`open = False}, 
                    TemplateBox[{"Expression", "SequenceIcon", 
                    GridBox[{{
                    ItemBox[
                    RowBox[{
                    TagBox["\"Head: \"", "IconizedLabel"], 
                    "\[InvisibleSpace]", 
                    TagBox["Sequence", "IconizedItem"]}]]}, {
                    ItemBox[
                    RowBox[{
                    TagBox["\"Length: \"", "IconizedLabel"], 
                    "\[InvisibleSpace]", 
                    TagBox["4", "IconizedItem"]}]]}, {
                    ItemBox[
                    RowBox[{
                    TagBox["\"Byte count: \"", "IconizedLabel"], 
                    "\[InvisibleSpace]", 
                    TagBox["1008", "IconizedItem"]}]]}}, 
                    GridBoxAlignment -> {"Columns" -> {{Left}}}, 
                    DefaultBaseStyle -> "Column", 
                    GridBoxItemSize -> {
                    "Columns" -> {{Automatic}}, 
                    "Rows" -> {{Automatic}}}], 
                    Dynamic[Typeset`open]},
                    "IconizedObject"]],
                    Sequence[Background -> Directive[
                    Opacity[0.6], 
                    Hue[0.1, 0.7, 3]], 
                    FrameMargins -> {{2, 2}, {0, 0}}, RoundingRadius -> 
                    0, FrameStyle -> Directive[
                    Opacity[0.5], 
                    Hue[0, 0.1, 0.8200000000000001]]],
                    SelectWithContents->True,
                    Selectable->False]}], "]"}], ",", "#1", ",", 
                 RowBox[{"{", 
                  RowBox[{"0", ",", "0"}], "}"}]}], "]"}], "&"}], 
              ")"}]}], "}"}]}]}], "]"}]}]}]}], "]"}]}], 
   "\[IndentingNewLine]", 
   RowBox[{"(*", 
    RowBox[{"Run", " ", "the", " ", "function"}], "*)"}], 
   "\[IndentingNewLine]", 
   RowBox[{"DrawGraph", "[", "]"}]}]}]], "Input"]
}, Open  ]]

A feature of quantum teleportation is that even though the protocol seems to be transmitting information faster than light, that isn’t really what’s happening when one traces everything through. And what Taufiq found is that in our models the multiway causal graph reveals how this works. In essence, the “teleportation” happens through causal edges that connect branchlike separated states—but these edges cannot transmit an actual measurable message.

Quantum Computing

How do we tell if our models correctly reproduce something like quantum computing? One approach is what I call “proof by compilation”. Just take a standard description of something—here quantum computing—and then systematically “compile” it to a representation in terms of our models.

Just before the Summer School, Jonathan Gorard put a function into the Wolfram Function Repository called QuantumToMultiwaySystem, which takes a description of a quantum circuit and “compiles it” to one of our multiway systems:

QuantumToMultiwaySystem

For example, here’s a Pauli-Z gate compiled to the rules for a multiway system:

ResourceFunction
&#10005

ResourceFunction[
ResourceObject[
Association[
   "Name" -> "QuantumToMultiwaySystem", 
    "ShortName" -> "QuantumToMultiwaySystem", 
    "UUID" -> "11c8aade-c41e-481e-85c0-10424fa9edbd", 
    "ResourceType" -> "Function", "Version" -> "1.0.0", 
    "Description" -> "Simulate a quantum evolution as a multiway \
system", "RepositoryLocation" -> URL[
     "https://www.wolframcloud.com/objects/resourcesystem/api/1.0"], 
    "SymbolName" -> "FunctionRepository`$\
337d322381db46d0b0c8103362842dec`QuantumToMultiwaySystem", 
    "FunctionLocation" -> CloudObject[
     "https://www.wolframcloud.com/obj/34b943dd-88a8-423c-a3d3-\
07922920160a"]], ResourceSystemBase -> Automatic]][<|
  "Operator" -> {{1, 0}, {0, -1}}, "Basis" -> {{1, 0}, {0, 1}}|>]

Here now is the result of starting with a superposition of states and running two steps of root-NOT gates:

ResourceFunction
ResourceFunction
&#10005

ResourceFunction[
ResourceObject[
Association[
   "Name" -> "QuantumToMultiwaySystem", 
    "ShortName" -> "QuantumToMultiwaySystem", 
    "UUID" -> "11c8aade-c41e-481e-85c0-10424fa9edbd", 
    "ResourceType" -> "Function", "Version" -> "1.0.0", 
    "Description" -> "Simulate a quantum evolution as a multiway \
system", "RepositoryLocation" -> URL[
     "https://www.wolframcloud.com/objects/resourcesystem/api/1.0"], 
    "SymbolName" -> "FunctionRepository`$\
337d322381db46d0b0c8103362842dec`QuantumToMultiwaySystem", 
    "FunctionLocation" -> CloudObject[
     "https://www.wolframcloud.com/obj/34b943dd-88a8-423c-a3d3-\
07922920160a"]], ResourceSystemBase -> Automatic]][<|
  "Operator" -> {{1 + I, 1 - I}, {1 - I, 1 + I}}, 
  "Basis" -> {{1, 0}, {0, 1}}|>, {1 + I, 
  1 - I}, 2, "EvolutionGraphFull"]

And, yes, we can understand entanglements through branchial graphs, etc.:

ResourceFunction
&#10005

ResourceFunction[
ResourceObject[
Association[
   "Name" -> "QuantumToMultiwaySystem", 
    "ShortName" -> "QuantumToMultiwaySystem", 
    "UUID" -> "11c8aade-c41e-481e-85c0-10424fa9edbd", 
    "ResourceType" -> "Function", "Version" -> "1.0.0", 
    "Description" -> "Simulate a quantum evolution as a multiway \
system", "RepositoryLocation" -> URL[
     "https://www.wolframcloud.com/objects/resourcesystem/api/1.0"], 
    "SymbolName" -> "FunctionRepository`$\
337d322381db46d0b0c8103362842dec`QuantumToMultiwaySystem", 
    "FunctionLocation" -> CloudObject[
     "https://www.wolframcloud.com/obj/34b943dd-88a8-423c-a3d3-\
07922920160a"]], ResourceSystemBase -> Automatic]][<|
  "Operator" -> {{1 + I, 1 - I}, {1 - I, 1 + I}}, 
  "Basis" -> {{1, 0}, {0, 1}}|>, {1 + I, 1 - I}, 2, "BranchialGraph"]

But, OK, if we can do this kind of compilation, what happens if we compile a famous quantum algorithm, like Shor’s algorithm for factoring integers, to a multiway system? At the Summer School, Yoav Rabinovich looked at this, working with Jack Heimrath and Jonathan Gorard. The whole of Shor’s algorithm is pretty messy, with lots of not-very-quantum parts. But the core of factoring an integer n is to do a quantum Fourier transform on Mod[a^Range[n],n], and then to do measurements on the resulting superposition of states and detect peaks.

Here’s a version of the quantum Fourier transform involved in factoring the integer n = 6, converted to one of our multiway systems:

Quantum Fourier transform

And, yes, there’s a lot going on here, but at least it’s happening “in parallel” in different branches of the quantum evolution—in just a few time steps. But the result here is just a superposition of quantum states; to actually find “the answer” we have to do measurements to find which quantum states have the highest amplitude, or largest path weight.

In the usual formalism of quantum mechanics, we’d just talk about “doing the measurement”; we wouldn’t discuss what goes on “inside the measurement”. But in our model we can analyze the actual process of measurement. And at least in Jonathan’s “completion interpretation” we can say that the measurement is achieved by a multiway system in which the observer effectively defines completions that merge branches:

Completions that merge branches

We’ve included path weights here, and “the answer” can effectively be read off by asking where in branchial space the maximum path weight occurs. But notice that lots of multiway edges (or events) had to be added to get the measurement done; that’s effectively the “cost of measurement” as revealed in our model.

So now the obvious question is: “How does this scale as one increases the number n? Including measurement, does the quantum computation ultimately succeed in factoring n in a polynomial number of steps?”

We don’t yet know the answer to this—but we’ve now more or less got the wherewithal to figure it out.

Here’s the basic picture. When we “do a quantum computation” we get to use the parallelism of having many different “threads” spread across branchial space. But when we want to measure what comes out, we have to “corral” all these threads back together to get a definite “observable” result. And the question is whether in the end we come out ahead compared to doing the purely classical computation.

I have to say that I’ve actually wondered about this for a very long time. And in fact, back in the early 1980s, when Richard Feynman and I worked on quantum computing, one of the main things we talked about was the “cost of measurement”. As an example, we looked at the “null” quantum computation of generating “random numbers” (e.g. from a process like radioactive decay)—and we ended up suspecting that there would be inevitable bounds on the “minimum cost of measurement”.

So it wouldn’t surprise me at all if in the end the “cost of measurement” wiped out any gains from “quantum parallelism”. But we don’t yet know for sure, and it will be interesting to continue the analysis and see what our models say.

I should emphasize that even if it turns out that there can’t be a “formal speed up” (e.g. polynomial vs. super-polynomial) from quantum mechanics, it still makes perfect sense to study “quantum computing”, because it’s basically inevitable that broadening the kinds of physics that are used to do computing will open up some large practical speed ups, even if they’re only by “constant factors”.

I might as well mention one slightly strange thought I had—just before the Summer School—about the power of quantum computing: it might be true that in an “isolated system” quantum parallelism would be offset by measurement cost, but that in the actual universe it might not be.

Here’s an analogy. Normally in physics one thinks that energy is conserved. But when one considers general relativity on cosmological scales, that’s no longer true. Imagine connecting a very long spring between the central black holes of two distant galaxies (and, yes, it’s very much a “thought experiment”). The overall expansion of the universe will make the galaxies get further apart, and so will continually impart energy to the spring. At some level we can think of this as “mining the energy of the Big Bang”, but on a local scale the result will be an apparent increase in available energy.

Well, in our models, the universe doesn’t just expand in physical space; it expands in branchial space too. So the speculation is that quantum computing might only “win” if it can “harvest” the expansion of branchial space. It seems completely unrealistic to get energy by harnessing the expansion of physical space. But it’s conceivable that there is so much more expansion in branchial space that it can be harnessed even locally—to deliver “true quantum power” to a quantum computer.

Corrections to the Einstein Equations

One of the important features of our models is that they provide a derivation of Einstein’s equations from something lower level—namely the dynamics of hypergraphs containing very large numbers of “atoms of space”. But if we can derive Einstein’s equations, what about corrections to Einstein’s equations? At the Summer School, Cameron Beetar and Jonathan Gorard began to explore this.

It’s immediately useful to think about an analogy. In standard physics, we know that on a microscopic scale fluids consist of large numbers of discrete molecules. But on a macroscopic scale the overall behavior of all these molecules gives us continuum fluid equations like the Navier–Stokes equations. Well, the same kind of thing happens in our models. Except that now we’re dealing with “atoms of space”, and the large-scale equations are the Einstein equations.

OK, so in our analogy of fluid mechanics, what are the higher-order corrections? As it happens, I looked at this back in 1986, when I was studying how fluid behavior could arise from simple cellular automata. The algebra was messy, and I worked it out using the system I had built that was the predecessor to Mathematica. But the end result was that there was a definite form for the corrections to the Navier–Stokes equations of fluid mechanics:

“Cellular Automaton Fluids 1: Basic Theory”

OK, so what’s the analog in our models? A key part of our derivation of the Einstein equations involves looking at volumes of small geodesic balls. On a d-dimensional manifold, the leading term is proportional to rd. Then there’s a correction that’s proportional to the Ricci scalar curvature, from which, in essence, we derive the Einstein equations. But what comes after that?

It turns out that longtime Mathematica user Alfred Gray had done this computation (even before Mathematica):

“The Volume of a Small Geodesic Ball of a Riemannian Manifold”

And basically using this result it’s possible to compute the form that the next-order corrections to the Einstein equations should take—as Jonathan already did in his paper a few months ago:

Next-order corrections to the Einstein equations

But what determines the parameters α, β, γ that appear here? Einstein’s original equations have the nice feature that they don’t involve any free parameters (apart from the cosmological constant): so long as there’s no “external source” (like “matter”) of energy-momentum the equations in effect just express the “conservation of cross-sectional area” of bundles of geodesics in spacetime. And this is similar to what happens with the Euler equations for incompressible fluids without viscosity—that essentially just express conservation of volume and momentum for “bundles of moving fluid”.

But to go further one actually has to know at least something about the structure and interactions of the underlying molecules. The analogy isn’t perfect, but working out the full Einstein equations including matter is roughly like working out the full Navier–Stokes equations for a fluid.

But there’s even further one can imagine going. In fluid mechanics, it’s about dealing with higher spatial derivatives of the velocity. In the case of our models, one has to deal with higher derivatives of the spacetime metric. In fluid mechanics the basic expansion parameter is the Knudsen number (molecular mean free path vs. length). In our models, the corresponding parameter is the ratio of the elementary length to a length associated with changes in the metric. Or, in other words, the higher-order corrections are about situations where one ends up seeing signs of deviations from pure continuum behavior.

In fluid mechanics, dealing with rarefied gases with higher Knudsen number and working out the so-called Burnett equations (and the various quantities that appear in them) is difficult. But it’s the analog of this that has to be done to fill in the parameters for corrections to the Einstein equations. It’s not clear to what extent the results will depend on the precise details of underlying hypergraph rules, and to what extent they’ll be at least somewhat generic—but it’s somewhat encouraging that at least to first order there are only a limited number of possible parameters.

In general, though, one can say that higher-order corrections can get large when the “radius of curvature” approaches the elementary length—or in effect sufficiently close to a curvature singularity.

Gauge Groups Meet Hypergraphs

Local gauge invariance is an important feature of what we know about physics. So how does it work in our models? At the Summer School, Graham Van Goffrier came up with a nice analysis that made considerably more explicit what we’d imagined before.

In the standard formalism of mathematical physics, based on continuous mathematics, one imagines having a fiber bundle in which at each point in a base space one has a fiber containing a copy of the gauge group, which is normally assumed to be a Lie group. But as Graham pointed out, one can set up a direct discrete analog of this. Imagine having a base space that’s a graph like:

Graph3D
&#10005

Graph3D[GridGraph[{5, 5, 5}]]

Now consider a discrete approximation to a Lie group, say the cyclic group like C6 approximating U(1):

Graph
&#10005

Graph[ResourceFunction["TorusGraph"][{6}], 
 EdgeStyle -> Directive[Red, Thick]]

Now imagine inserting the vertices of this at every point of the “base lattice”. Here’s an example of what one can get:

Base lattice

The red hexagons here are just visual guides; the true object simply has connections that knit together the “group elements” on each fiber. And the remarkable thing is that this can be thought of as a very direct discrete approximation to a fiber bundle—where the connections correspond quite literally to the so-called connections in the fiber bundle, that “align” the copies of the gauge group at each point, and in effect implement the covariant derivative.

In our models the structure of the discrete analog of the fiber bundle has to emerge from the actual operation of underlying hypergraph rules. And most likely this happens because there are multiple ways in which a given rule can locally be applied to a hypergraph, effectively leading to the kind of local symmetry we see appearing at every point of the base space.

But even without knowing any of the details of this, we can already work some things out just from the structure of our “fiber bundle graph”. For example, consider tracing out “Wilson loops” which visit fibers around a closed loop—and ask what the “total group action” associated with this process is. But by direct analogy with electromagnetism we can now interpret this as the “magnetic flux through the Wilson loop”.

But what happens if we look at the total flux emanating from a closed volume? For topological reasons, it’s inevitable that this is quantized. And even in the simple setup shown here we can start to interpret nonzero values as corresponding to the presence of “magnetic monopoles”.

Not Even Just Fundamental Physics

I developed what are now being called “Wolfram models” to be as a minimal and general as possible. And—perhaps not too surprisingly therefore—the models are looking as if they’re also very relevant for all sorts of things beyond fundamental physics. Several of these things got studied at the Summer School, notably in mathematics, in biology and in other areas of physics.

The applications in mathematics look to be particularly deep, and we’ve actually been working quite intensively on them over the past couple of weeks—leading to some rather exciting conclusions that I’m hoping to write about soon.

When it comes to biology, it seems possible that our models may be able to provide a new approach to thinking about biological evolution, and at the Summer School Antonia Kaestner and Tali Beynon started trying to understand how graphs—and multiway systems—might be used to represent evolutionary processes:

GraphicsBox

Another project at the Summer School, by Matthew Kafker (working with Christopher Wolfram), concerned hard sphere gases. I have a long personal history with hard sphere gases: looking at them was what first got me interested—back in 1972—in questions about the emergence of complexity. So I was quite surprised that after all these years, there was something new to consider with them. But a feature of our models is that they suggest a different way to look at systems.

Model

So what if we think of the collisions in a hard sphere gas as events? Then—just like in our models—we can make a causal graph that shows the causal relationships between these events:

And—just like in our models—we can define light cones and so on. But what does this tell us about hard sphere gases? Standard statistical mechanics approaches look at local statistical properties—in a sense making a “molecular chaos” assumption that everything else is random. But the causal graph has the potential to give us much more global (and long-range) information—which is likely to be increasingly important as the density of the hard sphere gas increases.

Hard sphere gases are based on classical physics. But given that our models naturally include quantum mechanics, does that give us a way to study quantum gases, or quantum fluids? At the Summer School Ivan Martinez studied a quantum generalization of my 1986 cellular automaton fluids model.

In that model discrete idealized molecules undergo 2- and 3-body collisions. And when I originally set this up, I just picked possible outcomes from these collisions consistent with momentum conservation. But there are several choices to make—and with the understanding we now have, the obvious thing to do is just to follow all choices, and make a multiway system. Here are the collisions and possible outcomes:

Collisions

A single branch of the multiway system produces a specific pattern of fluid flow. But the whole multiway system represents a whole collection of quantum states—or in effect a quantum fluid (and in the most obvious version of the model, a Fermi fluid). So now we can start to ask questions about the quantum fluid, studying branchial graphs, event horizons, etc.

And Lots of Other Projects Too…

And Lots of Other Projects Too...

I’ve talked about 11 projects so far here—but that’s less than a third of all the Wolfram Physics–related projects at the Summer School.

There were projects about the large-scale structure of hypergraphs, and phenomena like the spatial distribution of dimension, time variation of dimension and possible overall growth rates of hypergraphs. There was a project about characterizing overall structures of hypergraphs by finding PDE modes on them (“Weyl’s law for graphs”).

What happens if you look at the space of all possible hypergraphs, and for example form state transition graphs by applying rules? One project explored subgraphs excluded by evolution (“the approach to attractor states”). Another project explored the structure of the space of possible hypergraphs, and the mathematical analysis of ergodicity in it.

One of the upcoming challenges in our models is about identifying “particles” and their properties. One project started directly hunting for particles by looking at the effects of perturbations in hypergraphs. Another studied the dynamics of specific kinds of “topologically stable defects” in hypergraphs. There was a project looking for global conservation laws in hypergraph rewriting, and another studying local graph invariants. There was also a project that started to make a rather direct detector of gravitational waves in our models.

There were projects that analysed the global behavior of our models. One continued the enumeration of cases in which black holes arise. Another looked at termination and completion in multiway systems. Still another compared growth in physical vs. branchial space.

I mentioned above the concept of “proof by compilation” and its use in validating the quantum features of our models. One project at the Summer School began the process of using our models as a foundation for practical “numerical general relativity” (in much the same way as my cellular automata fluids have become the basis for practical fluid computations).

There are lots of interesting questions about how our models relate to known features of physics. And there were projects at the Summer School about understanding the emergence of rotational invariance and CPT invariance as well as the AdS/CFT correspondence (and things like the Bekenstein bound).

There were projects about the Wolfram Physics Project not only at our Summer School, but also at our High School Summer Camp. One explored the emergent differential geometry of a particular one of our models that makes something like a manifold with curvature. Others explored fundamental aspects of models like ours. One searched for multiway systems with intermediate growth. Another explored multiway systems based on cyclic string substitutions.

There were still other projects at both the Summer School and Summer Camp that explored systems from the computational universe—now informed by ideas from the Wolfram Physics Project. One looked at non-deterministic Turing machines; another looked at combinators.

I suggested most of the projects I’ve discussed here, and that makes it particularly satisfying for me to see how well they’ve progressed. Few are yet “finished”, but they’re all off and running, beginning to build up a serious corpus of work around the Wolfram Physics Project. And I’m looking forward to seeing how they develop, what they discover, how they turn into papers—and how they seed other work which will help explore the amazing basic science opportunity that’s opened up with the Wolfram Physics Project.

]]>
https://writings.stephenwolfram.com/2020/07/a-burst-of-physics-progress-at-the-2020-wolfram-summer-school/feed/ 0
<![CDATA[Exploring Rulial Space: The Case of Turing Machines]]> https://writings.stephenwolfram.com/2020/06/exploring-rulial-space-the-case-of-turing-machines/ https://writings.stephenwolfram.com/2020/06/exploring-rulial-space-the-case-of-turing-machines/#comments Tue, 09 Jun 2020 18:34:49 +0000 Stephen Wolfram https://writings.internal.stephenwolfram.com/?p=24713

Wolfram Physics Bulletin

Informal updates and commentary on progress in the Wolfram Physics Project

Generalized Physics and the Theory of Computation

Let’s say we find a rule that reproduces physics. A big question would then be: “Why this rule, and not another?” I think there’s a very elegant potential answer to this question, that uses what we’re calling rule space relativity---and that essentially says that there isn’t just one rule: actually all possible rules are being used, but we’re basically picking a reference frame that makes us attribute what we see to some particular rule. In other words, our description of the universe is a sense of our making, and there can be many other---potentially utterly incoherent---descriptions, etc.

But so how does this work at a more formal level? This bulletin is going to explore one very simple case. And in doing so we'll discover that what we're exploring is potentially relevant not only for questions of "generalized physics", but also for fundamental questions in the theory of computation. In essence, what we'll be doing is to study the structure of spaces created by applying all possible rules, potentially, for example, allowing us to "geometrize" spaces of possible algorithms and their applications.]]>

Wolfram Physics Bulletin

Informal updates and commentary on progress in the Wolfram Physics Project

Generalized Physics and the Theory of Computation

Let’s say we find a rule that reproduces physics. A big question would then be: “Why this rule, and not another?” I think there’s a very elegant potential answer to this question, that uses what we’re calling rule space relativity—and that essentially says that there isn’t just one rule: actually all possible rules are being used, but we’re basically picking a reference frame that makes us attribute what we see to some particular rule. In other words, our description of the universe is a sense of our making, and there can be many other—potentially utterly incoherent—descriptions, etc.

But so how does this work at a more formal level? This bulletin is going to explore one very simple case. And in doing so we’ll discover that what we’re exploring is potentially relevant not only for questions of “generalized physics”, but also for fundamental questions in the theory of computation. In essence, what we’ll be doing is to study the structure of spaces created by applying all possible rules, potentially, for example, allowing us to “geometrize” spaces of possible algorithms and their applications.

In our models of physics, we begin by considering spatial hypergraphs that describe relations between “atoms of space”. Then, looking at all possible ways a given rule can update these hypergraphs, we form what we call a multiway graph. The transversals of this graph define what we call branchial space, in which we can see the pattern of entanglements between quantum states.

But there’s also a third level we can consider. Instead of just forming a multiway graph in which we do all possible updates with a given rule, we form a rulial multiway (or “ultramultiway”) graph in which we follow not only all possible updates, but also all possible rules. The transversals to this rulial multiway graph define what we call rulial space. Causal invariance in the rulial multiway graph then implies “rule space relativity” which is what allows us to use different possible reference frames to describe the universe.

In the end, the Principle of Computational Equivalence implies a certain invariance to the limiting structure of the rulial multiway graph, independent of the particular parametrization of the set of possible rules. But for the sake of understanding rulial space and the rulial multiway graph—and getting intuition about these—this bulletin is going to look at a specific set of possible rules, defined by simple Turing machines.

The rules we’ll use aren’t a good fit for describing our universe. But the comparative simplicity of their structure will help us in trying to elucidate some of the complexities of rulial space. In addition, using Turing machines will make it easier for us to make contact with the theory of computation, where Turing machines are standard models.

Turing Machines

Here’s a representation of the rule for a particular 2-state (s = 2), 2-color (k = 2) Turing machine:

RulePlot
&#10005

RulePlot[TuringMachine[2506]]

The pointer represents the “head” of the Turing machine and its orientation represents the state of the head. Here’s what this particular Turing machine does over the course of a few steps starting from a “blank tape” (i.e. all squares white):

RulePlot
&#10005

RulePlot[TuringMachine[2506], {{1, 10}, Table[0, 21]}, 20, 
 Mesh -> All, Frame -> None]

There are (2 s k)sk possible s-state k-color Turing machines, or 4096 s = 2, k = 2 machines. Here are all the distinct behaviors that occur (up to left-right reflection) in these 4096 machines, starting from a blank tape:

allrules = With
&#10005

allrules = 
  With[{s = 2, k = 2}, 
   Table[Flatten[
     MapIndexed[{1, -1} #2 + {0, 
          k} -> {1, 1, 2} Mod[
           Quotient[#1, {2 k, 2, 1}], {s, k, 2}] + {1, 0, -1} &, 
      Partition[IntegerDigits[n, 2 s k, s k], k], {2}]], {n, 0, 
     4095}]];
o0[{s1_, k1_} -> {s2_, k2_, o_}] := {s1, k1} -> {s2, k2, -o};
minrule[r_] := First[Sort[Sort /@ {r, o0 /@ r}]];
Keys[ReverseSort[
  Counts[RulePlot[TuringMachine[#], {1, {{}, 0}}, 9, 
      ImageSize -> {Automatic, 45}, FrameStyle -> LightGray] & /@ 
    Union[minrule /@ allrules]]]]

But note that all these are deterministic Turing machines, in the sense that, for a given machine, it is always the same rule that is applied at every step. But what about non-deterministic Turing machines? The idea here is to allow several different rules at any given step.

As a simple example, consider the pair of rules:

RulePlot
&#10005

RulePlot[TuringMachine[#]] & /@ {2506, 3506}

To show the possible evolution histories, we can construct a multiway system:

With
&#10005

With[{t = 3}, 
 Show[ResourceFunction["MultiwayTuringMachine"][{2506, 
     3506}, {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, "StatesGraph", 
    "IncludeEventInstances" -> True, 
    VertexSize -> 1.1 {1, 1/(2 t + 1)}]] /. 
  Arrowheads[Medium] -> Arrowheads[0.025]]

Each arrow represents an application of one of the two possible rules. A non-deterministic Turing machine is usually considered to follow a particular path, corresponding to a particular evolution history. Then a typical question is whether there exists some path that leads to a particular final state (which might be viewed as the solution to some particular problem). (In a quantum Turing machine, one considers collections of multiple states, viewed as being in a quantum superposition.)

In what we’re going to be doing here, we want to study the “extreme case” of non-determinism—where at every step, every possible Turing machine rule (at least with a given s, k) is applied. Then we’ll be interested in the full rulial multiway graph that’s created.

The Rulial Multiway Graph

Start with a blank tape. Then apply all possible 2,2 Turing machine rules. This is the rulial multiway graph that’s formed after 1 step:

With[{t = 1}
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]];
With[{t = 1}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "StatesGraph", "IncludeEventInstances" -> False, 
  VertexSize -> .25 {1, 1/(2 t + 1)}]]

Each individual arrow here represents many possible rules from all the 4096 discussed above. Here’s what happens after 2 steps:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 With[{t = 2}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
   "StatesGraph", "IncludeEventInstances" -> False, 
   PerformanceGoal -> "Quality", VertexSize -> .4 {1.1, .3}]], 
 EdgeStyle -> 
  Directive[Arrowheads[0.015], 
   ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
    "EdgeStyle"], Dashing[None], AbsoluteThickness[1]]]

In layered form, this becomes:

LayeredGraphPlot
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; LayeredGraphPlot[
 With[{t = 2}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
   "StatesGraph", "IncludeEventInstances" -> False, 
   PerformanceGoal -> "Quality", VertexSize -> {1, .3}]], 
 EdgeStyle -> 
  Directive[Arrowheads[0.01], Hue[0.75, 0, 0.35], Dashing[None], 
   AbsoluteThickness[1]], AspectRatio -> 1/4]

In creating these rulial multiway graphs, there’s an important simplification we’re able to make. We don’t need to separately apply all 4096 2,2 Turing machine rules to each state at each step—because all that ever matters is the one case of the rule that’s relevant to the particular state one has. There are 4 possible individual cases—and for each of these there are 8 possible outcomes, leading to 32 “micro-rules”:

GraphicsGrid
&#10005

Cell[CellGroupData[{
Cell[BoxData[{
 RowBox[{
  RowBox[{"CloudGet", "[", 
   RowBox[{
   "CloudObject", "[", 
    "\"\<https://www.wolframcloud.com/obj/wolframphysics/Bulletin/\
DeltaTM.wl\>\"", "]"}], "]"}], ";"}], "\[IndentingNewLine]", 
 RowBox[{
  RowBox[{
   RowBox[{"tmg0", "[", 
    RowBox[{
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s_", ",", "a_"}], "}"}], "\[Rule]", 
      RowBox[{"{", 
       RowBox[{"sp_", ",", "ap_", ",", "dir_"}], "}"}]}], ",", 
     "stot_", ",", "k_"}], "]"}], ":=", 
   RowBox[{"With", "[", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{"cf", "=", 
       RowBox[{"Apply", "[", 
        RowBox[{"Function", ",", 
         RowBox[{"{", 
          RowBox[{"Piecewise", "[", 
           RowBox[{
            RowBox[{"Table", "[", 
             RowBox[{
              RowBox[{"{", 
               RowBox[{
                RowBox[{"Blend", "[", 
                 RowBox[{
                  RowBox[{"{", 
                   RowBox[{
                    RowBox[{"RGBColor", "[", 
                    RowBox[{"0.977", ",", "0.952", ",", "0."}], "]"}],
                     ",", 
                    RowBox[{"RGBColor", "[", 
                    RowBox[{"0.965", ",", "0.401", ",", "0.18"}], 
                    "]"}]}], "}"}], ",", 
                  RowBox[{"If", "[", 
                   RowBox[{
                    RowBox[{"k", "\[LessEqual]", "2"}], ",", 
                    RowBox[{"1", "/", "2"}], ",", 
                    RowBox[{"i", "/", 
                    RowBox[{"(", 
                    RowBox[{"k", "-", "2"}], ")"}]}]}], "]"}]}], 
                 "]"}], ",", 
                RowBox[{"#", ">", "i"}]}], "}"}], ",", 
              RowBox[{"{", 
               RowBox[{"i", ",", 
                RowBox[{"k", "-", "2"}], ",", "0", ",", 
                RowBox[{"-", "1"}]}], "}"}]}], "]"}], ",", "White"}], 
           "]"}], "}"}]}], "]"}]}], "}"}], ",", 
     RowBox[{"Graphics", "[", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{
         RowBox[{"{", 
          RowBox[{"White", ",", 
           RowBox[{"Rectangle", "[", 
            RowBox[{
             RowBox[{"Scaled", "[", 
              RowBox[{"{", 
               RowBox[{"0", ",", "0"}], "}"}], "]"}], ",", 
             RowBox[{"Scaled", "[", 
              RowBox[{"{", 
               RowBox[{"1", ",", "1"}], "}"}], "]"}]}], "]"}]}], 
          "}"}], ",", 
         RowBox[{"{", 
          RowBox[{
           RowBox[{"Directive", "[", 
            RowBox[{
             RowBox[{"EdgeForm", "[", 
              RowBox[{"Directive", "[", 
               RowBox[{
                RowBox[{"GrayLevel", "[", ".6", "]"}], ",", 
                RowBox[{"AbsoluteThickness", "[", "0.7", "]"}]}], 
               "]"}], "]"}], ",", 
             RowBox[{"cf", "[", "a", "]"}]}], "]"}], ",", 
           RowBox[{"Rectangle", "[", 
            RowBox[{
             RowBox[{"{", 
              RowBox[{"1", ",", "0"}], "}"}], ",", 
             RowBox[{"{", 
              RowBox[{"2", ",", "1"}], "}"}]}], "]"}]}], "}"}], ",", 
         RowBox[{"{", 
          RowBox[{
           RowBox[{"Directive", "[", 
            RowBox[{
             RowBox[{"EdgeForm", "[", 
              RowBox[{"Directive", "[", 
               RowBox[{
                RowBox[{"GrayLevel", "[", ".6", "]"}], ",", 
                RowBox[{"AbsoluteThickness", "[", "0.7", "]"}]}], 
               "]"}], "]"}], ",", 
             RowBox[{"cf", "[", "ap", "]"}]}], "]"}], ",", 
           RowBox[{"Rectangle", "[", 
            RowBox[{
             RowBox[{"{", 
              RowBox[{"1", ",", 
               RowBox[{
                RowBox[{"-", "5"}], "/", "4"}]}], "}"}], ",", 
             RowBox[{"{", 
              RowBox[{"2", ",", 
               RowBox[{
                RowBox[{"-", "1"}], "/", "4"}]}], "}"}]}], "]"}]}], 
          "}"}], ",", 
         RowBox[{"{", 
          RowBox[{
           RowBox[{
           "NKSSpecialFunctions`RulePlot`Dump`TuringMarker", "[", 
            RowBox[{
             RowBox[{"{", 
              RowBox[{"1.5", ",", "0.5"}], "}"}], ",", 
             RowBox[{"{", 
              RowBox[{"s", ",", "stot"}], "}"}]}], "]"}], ",", 
           RowBox[{
           "NKSSpecialFunctions`RulePlot`Dump`TuringMarker", "[", 
            RowBox[{
             RowBox[{"{", 
              RowBox[{
               RowBox[{"1.5", "+", "dir"}], ",", 
               RowBox[{
                RowBox[{"-", "3"}], "/", "4"}]}], "}"}], ",", 
             RowBox[{"{", 
              RowBox[{"sp", ",", "stot"}], "}"}]}], "]"}]}], "}"}]}], 
        "}"}], ",", 
       RowBox[{"PlotRange", "\[Rule]", 
        RowBox[{"{", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{
             RowBox[{"-", "1"}], "/", "2"}], ",", 
            RowBox[{"3", "+", 
             RowBox[{"1", "/", "2"}]}]}], "}"}], ",", 
          RowBox[{"{", 
           RowBox[{
            RowBox[{
             RowBox[{"-", "7"}], "/", "4"}], ",", 
            RowBox[{"3", "/", "2"}]}], "}"}]}], "}"}]}]}], "]"}]}], 
    "]"}]}], ";"}], "\[IndentingNewLine]", 
 RowBox[{
  RowBox[{
   RowBox[{"ElementaryTuringGraphic", "[", 
    RowBox[{"rules_List", ",", 
     RowBox[{"s_Integer", ":", "2"}], ",", 
     RowBox[{"k_Integer", ":", "2"}], ",", "opts___"}], "]"}], ":=", 
   RowBox[{"Table", "[", 
    RowBox[{
     RowBox[{
     "NKSSpecialFunctions`RulePlot`Dump`AtlasGraphicsGrid", "[", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"{", 
         RowBox[{"tmg0", "[", 
          RowBox[{"r", ",", "s", ",", "k"}], "]"}], "}"}], "}"}], ",",
        "opts", ",", 
       RowBox[{"Frame", "\[Rule]", "True"}]}], "]"}], ",", 
     RowBox[{"{", 
      RowBox[{"r", ",", "rules"}], "}"}]}], "]"}]}], ";"}]}], "Input"],

Cell[BoxData[
 RowBox[{"GraphicsGrid", "[", 
  RowBox[{"With", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"s", " ", "=", " ", "2"}], ",", " ", 
      RowBox[{"k", " ", "=", " ", "2"}]}], "}"}], ",", " ", 
    RowBox[{"Partition", "[", 
     RowBox[{
      RowBox[{"ElementaryTuringGraphic", "[", 
       RowBox[{
        RowBox[{"Flatten", "[", 
         RowBox[{"Table", "[", 
          RowBox[{
           RowBox[{"DeltaTMRule", "[", 
            RowBox[{
             RowBox[{"{", 
              RowBox[{"si", ",", " ", "ki"}], "}"}], ",", " ", 
             RowBox[{"{", 
              RowBox[{"s", ",", " ", "k"}], "}"}]}], "]"}], ",", " ", 
           
           RowBox[{"{", 
            RowBox[{"si", ",", " ", "s"}], "}"}], ",", " ", 
           RowBox[{"{", 
            RowBox[{"ki", ",", " ", "0", ",", " ", 
             RowBox[{"k", " ", "-", " ", "1"}]}], "}"}]}], "]"}], 
         "]"}], ",", 
        RowBox[{"ImageSize", " ", "\[Rule]", " ", "50"}]}], "]"}], 
      ",", "8"}], "]"}]}], "]"}], "]"}]], "Input"]
}, Open  ]]

After 3 steps, the rulial multiway graph has the form:

With[{t = 3}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 3}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
  "StatesGraphStructure", VertexSize -> 1]]

In 3D this becomes:

Graph3D
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]];
Graph3D[With[{t = 3}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
   "StatesGraphStructure", VertexSize -> 1, 
   EdgeStyle -> Directive[Hue[0.62, 0.05, 0.55], Opacity[.6]]]]]

In layered form it is:

LayeredGraphPlot
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]];
LayeredGraphPlot[
 With[{t = 3}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
   "StatesGraphStructure"]], AspectRatio -> 1/4]

After 5 steps, the rulial multiway graph is:

With
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 5}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
  "StatesGraphStructure", VertexSize -> 1]]

What about other numbers of states and colors? Here are the rulial multiway graphs after 3 steps for Turing machines with various numbers of states and colors :

ParallelMap
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; ParallelMap[
 Labeled[With[{t = 3}, 
    ResourceFunction["MultiwayTuringMachine"][
     AllDeltaTMRules[#], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
     "StatesGraphStructure"]], Text[#]] &, {{1, 2}, {1, 3}, {1, 
   4}, {2, 2}, {2, 3}, {2, 4}, {3, 2}, {3, 3}, {3, 4}, {4, 2}, {4, 
   3}, {4, 4}}]

Notice the presence of s = 1 examples. Even with a single possible state, it is already possible to form a nontrivial rulial multiway system. Here are the results for k = 2 after 1 step:

With
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 1}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "StatesGraph", "IncludeEventInstances" -> False, 
  VertexSize -> .4 {1, 1/(2 t + 1)}]]

2 steps:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 With[{t = 2}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraph", 
   "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
   VertexSize -> .5 {1.1, .3}]], 
 EdgeStyle -> 
  Directive[Arrowheads[0.02], 
   ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
    "EdgeStyle"], Dashing[None], AbsoluteThickness[1]]]

6 steps:

With
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]];
With[{t = 6}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "StatesGraphStructure"]]

In principle one can also consider the even simpler case of s = k = 1. After 1 step one gets:

With
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 1}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{1, 1}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "StatesGraph", "IncludeEventInstances" -> False, 
  PerformanceGoal -> "Quality", VertexSize -> .7 {1, 1/(2 t + 1)}]]

After 2 steps this becomes:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 With[{t = 2}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{1, 1}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraph", 
   "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
   VertexSize -> .5 {1.1, .3}]], 
 EdgeStyle -> 
  Directive[Arrowheads[0.02], 
   ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
    "EdgeStyle"], Dashing[None], AbsoluteThickness[1]]]

And after 3 steps:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 With[{t = 3}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{1, 1}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraph", 
   "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
   VertexSize -> .5 {1, .3}]], 
 EdgeStyle -> 
  Directive[Arrowheads[0.015], 
   ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
    "EdgeStyle"], Dashing[None], AbsoluteThickness[1]]]

As a layered graph rendering, this becomes:

LayeredGraphPlot
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; LayeredGraphPlot[
 With[{t = 4}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{1, 1}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
   "StatesGraphStructure"]], AspectRatio -> 1/2]

With s = 2, k = 1 one gets after 1 step:

With
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 1}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "StatesGraph", "IncludeEventInstances" -> False, 
  PerformanceGoal -> "Quality", VertexSize -> .6 {1, 1/(2 t + 1)}]]

After 2 steps this becomes:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 With[{t = 2}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraph", 
   "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
   VertexSize -> .5 {1, .27}]], 
 EdgeStyle -> 
  Directive[Arrowheads[0.02], 
   ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
    "EdgeStyle"], Dashing[None], AbsoluteThickness[1]]]

And after 3 steps:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 With[{t = 3}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraph", 
   "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
   VertexSize -> .5 {1.15, .3}]], 
 EdgeStyle -> 
  Directive[Arrowheads[0.015], 
   ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
    "EdgeStyle"], Dashing[None], AbsoluteThickness[1]]]

After 6 steps this becomes:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 With[{t = 6}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure", 
   "IncludeEventInstances" -> False, PerformanceGoal -> "Quality"]], 
 EdgeStyle -> 
  Directive[Arrowheads[0.013], 
   ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
    "EdgeStyle"], Dashing[None], AbsoluteThickness[1]]]

At least in the central part of this graph, there are edges going in both directions. Combining these, and treating the graph as undirected, one gets:

SimpleGraph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; SimpleGraph[
 UndirectedGraph[
  With[{t = 6}, 
   ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, 
     ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure", 
    "IncludeEventInstances" -> False, PerformanceGoal -> "Quality"]]]]

With 3 states (s = 3) there are 3 tracks:

SimpleGraph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; SimpleGraph[
 UndirectedGraph[
  With[{t = 6}, 
   ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{3, 1}], {{1, t + 1, 0}, 
     ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure", 
    "IncludeEventInstances" -> False, PerformanceGoal -> "Quality"]]]]

One can also consider Turing machines in which the head can not only move left or right, but can also stay still. In this case, with s = 2, k = 1 one gets after 1 step:

With
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 1}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 1}, {-1, 0, 1}], {{1, t + 1, 0}, 
   ConstantArray[0, 2 t + 1]}, t, "StatesGraph", 
  "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
  VertexSize -> .6 {1, 1/(2 t + 1)}]]

After 2 steps this becomes:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 With[{t = 2}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 1}, {-1, 0, 1}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraph", 
   "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
   VertexSize -> .5 {1.15, .3}]], 
 EdgeStyle -> 
  Directive[Arrowheads[0.015], 
   ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
    "EdgeStyle"], Dashing[None], AbsoluteThickness[1]]]

After 4 steps, removing repeated edges, etc. this gives:

SimpleGraph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; SimpleGraph[
 UndirectedGraph[
  With[{t = 4}, 
   ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{2, 1}, {-1, 0, 1}], {{1, t + 1, 0}, 
     ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure", 
    "IncludeEventInstances" -> False, PerformanceGoal -> "Quality"]]]]

As another generalization, one can consider Turing machines that can move not just one, but also two squares:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 With[{t = 1}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 1}, {-2, -1, 0, 1, 2}], {{1, 2 t + 1, 0}, 
    ConstantArray[0, 4 t + 1]}, t, "StatesGraph", 
   "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
   VertexSize -> .3 {1.15, .3}]], 
 EdgeStyle -> 
  Directive[Arrowheads[0.015], 
   ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
    "EdgeStyle"], Dashing[None], AbsoluteThickness[1]]]

After 2 steps one gets:

With
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 2}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 1}, {-2, -1, 0, 1, 2}], {{1, 2 t + 1, 0}, 
   ConstantArray[0, 4 t + 1]}, t, "StatesGraph", 
  "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
  VertexSize -> .6 {1, 1/(2 t + 1)}]]

After 3 steps, removing repeated edges, etc. this gives:

SimpleGraph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; SimpleGraph[
 UndirectedGraph[
  With[{t = 3}, 
   ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{2, 1}, {-2, -1, 0, 1, 2}], {{1, 2 t + 1, 0}, 
     ConstantArray[0, 4 t + 1]}, t, "StatesGraphStructure", 
    "IncludeEventInstances" -> False, PerformanceGoal -> "Quality"]]]]

The Limit of the Rulial Multiway Graph

What is the limiting structure of the rulial multiway graph after an infinite number of steps? The first crucial observation is that it’s in a sense homogeneous: the structure of the graph around any given node is always the same (i.e. it’s a vertex-transitive graph). To see why this is true, recall that each node in the graph corresponds to a particular distinct configuration of the Turing machine. This node will lead to all nodes that can be obtained from it by one step of Turing machine evolution. But (assuming the head always moves ±1 square) there are always exactly 2 s k of these. And because we are following all possible “micro-rules”, we can think of ourselves as just “blindly overwriting” whatever configuration we had, so that the structure of the graph is the same independent of what configuration we’re at.

As a simple example, here’s what happens in the s = 2, k = 1 case, after 3 steps:

With
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 3}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "StatesGraph", "IncludeEventInstances" -> False, 
  PerformanceGoal -> "Quality", VertexSize -> .9 {1, 1/(2 t + 1)}]]

There’s some trickiness at the ends, but in the central region we see as expected that each node has exactly 4 successors. If we pick out the subgraph around the blank-tape starting node it has the form:

With
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{g = 
   With[{t = 3}, 
    ResourceFunction["MultiwayTuringMachine"][
     AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, 
      ConstantArray[0, 2 t + 1]}, t, "StatesGraph", 
     "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
     VertexSize -> .8 {1, 1/(2 t + 1)}]]}, 
 NeighborhoodGraph[g, First[VertexList[g]], 1, 
  VertexCoordinates -> None]]

In general, the limiting neighborhood of every node is just:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 CanonicalGraph[
  With[{g = 
     With[{t = 3}, 
      ResourceFunction["MultiwayTuringMachine"][
       AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, 
        ConstantArray[0, 2 t + 1]}, t, "StatesGraph", 
       "IncludeEventInstances" -> False, PerformanceGoal -> "Quality",
        VertexSize -> .8 {1, 1/(2 t + 1)}]]}, 
   NeighborhoodGraph[g, First[VertexList[g]], 1]]], 
 EdgeStyle -> 
  ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
   "EdgeStyle"], 
 VertexStyle -> 
  ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
   "VertexStyle"]]

In the full graph, these neighborhoods are knitted together, giving pieces like:

Graph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Graph[
 CanonicalGraph[
  With[{g = 
     With[{t = 8}, 
      ResourceFunction["MultiwayTuringMachine"][
       AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, 
        ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure", 
       PerformanceGoal -> "Quality"]]}, 
   NeighborhoodGraph[g, First[VertexList[g]], 3]]], 
 EdgeStyle -> 
  ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
   "EdgeStyle"], 
 VertexStyle -> 
  ResourceFunction["WolframPhysicsProjectStyleData"]["StatesGraph"][
   "VertexStyle"]]

Let’s now consider the case s = 1, k = 2. After 4 steps the full graph is:

With[{t = 4}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 4}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "StatesGraph", "IncludeEventInstances" -> False, 
  PerformanceGoal -> "Quality", VertexSize -> .45 {1.15, .3}]]

Here the neighborhood of the start node is:

With
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{g = 
   With[{t = 4}, 
    ResourceFunction["MultiwayTuringMachine"][
     AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, 
      ConstantArray[0, 2 t + 1]}, t, "StatesGraph", 
     "IncludeEventInstances" -> False, PerformanceGoal -> "Quality", 
     VertexSize -> 1 {1, 1/(2 t + 1)}]]}, 
 NeighborhoodGraph[g, First[VertexList[g]], 1, 
  VertexCoordinates -> None]]

And in the limiting graph, every node will have a local neighborhood with this same structure. If we look at successively larger neighborhoods, the limiting form of these for every node will be:

With
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{g = 
   With[{t = 8}, 
    ResourceFunction["MultiwayTuringMachine"][
     AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, 
      ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure"]]}, 
 Table[NeighborhoodGraph[g, First[VertexList[g]], i, 
   VertexCoordinates -> None], {i, 4}]]

Here’s a table of the number of distinct nodes in these successively larger neighborhoods for Turing machines with various values of s and k:

Grid
&#10005

data = {{1, 
   1, {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 
    31}}, {1, 
   2, {1, 5, 18, 50, 124, 288, 640, 1384, 2928, 6112, 12608, 25824, 
    52544, 106496, 215040, 433280}}, {1, 
   3, {1, 7, 39, 153, 543, 1809, 5787, 18117, 55755, 170181, 515727, 
    1557873}}, {2, 
   1, {1, 5, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 58, 
    62}}, {2, 
   2, {1, 9, 36, 100, 248, 576, 1280, 2768, 5856, 12224, 25216, 51648,
     105088, 212992, 430080}}, {2, 
   3, {1, 13, 78, 306, 1086, 3618, 11574, 36234, 111510, 340362}}, {3,
    1, {1, 7, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 
    93}}, {3, 
   2, {1, 13, 54, 150, 372, 864, 1920, 4152, 8784, 18336, 37824, 
    77472, 157632, 319488}}, {3, 
   3, {1, 19, 117, 459, 1629, 5427, 17361, 54351, 167265}}, {4, 
   1, {1, 9, 20, 28, 36, 44, 52, 60, 68, 76, 84, 92, 100, 108, 116, 
    124}}, {4, 
   2, {1, 17, 72, 200, 496, 1152, 2560, 5536, 11712, 24448, 50432, 
    103296}}}; Grid[
 Prepend[Map[
   Style[#] &, {#1, #2, 
      Row[Append[#3, "\[Ellipsis]"], ", "]} & @@@ 
    SortBy[data, #[[2]] &], {2}], {ToString[HoldForm[s], 
    TraditionalForm], ToString[HoldForm[k], TraditionalForm], ""}], 
 Background -> {None, {1 -> GrayLevel[0.94]}}, 
 Dividers -> {Thread[{1, 4} -> Directive[Thick, GrayLevel[0.7]]], 
   Thread[{1, 2, 6, 10, 13} -> Directive[Thick, GrayLevel[0.7]]]}, 
 Frame -> All, FrameStyle -> GrayLevel[0.7], Alignment -> Left]

In the limit t   the number of nodes reached in all cases goes like:

For k = 1, one finds (for ):

For t = 1 one has:

If one ignores directedness in the graph, and just counts the total number of neighbors out to distance t, the results for k = 1 are the same as before, but in other cases they are different:

Grid
&#10005

datau = {{1, 
    1, {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 
     31}}, {1, 
    2, {1, 7, 26, 74, 180, 412, 900, 1924, 4028, 8348, 17116, 34908, 
     70780, 118654, 215040, 433280}}, {1, 
    3, {1, 11, 63, 273, 975, 3273, 10443, 32685, 100443, 203825, 
     515727, 1557873}}, {2, 
    1, {1, 5, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 58, 
     62}}, {2, 
    2, {1, 13, 52, 148, 360, 824, 1800, 3848, 8056, 16696, 34232, 
     69816, 117244, 212992, 430080}}, {2, 
    3, {1, 21, 126, 546, 1950, 6546, 20886, 43282, 111510, 
     340362}}, {3, 
    1, {1, 7, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 
     93}}, {3, 
    2, {1, 19, 78, 222, 540, 1236, 2700, 5772, 12084, 25044, 51348, 
     86490, 157632, 319488}}, {3, 
    3, {1, 31, 189, 819, 2925, 9819, 20757, 54351, 167265}}, {4, 
    1, {1, 9, 20, 28, 36, 44, 52, 60, 68, 76, 84, 92, 100, 108, 116, 
     124}}, {4, 
    2, {1, 25, 104, 296, 720, 1648, 3600, 7696, 16112, 27384, 50432, 
     103296}}};
Grid[Prepend[
  Map[Style[#] &, {#1, #2, 
      Row[Append[Drop[#3, -3], "\[Ellipsis]"], ", "]} & @@@ 
    SortBy[Select[datau, #[[2]] != 1 &], #[[2]] &], {2}], {ToString[
    HoldForm[s], TraditionalForm], 
   ToString[HoldForm[k], TraditionalForm], ""}], 
 Background -> {None, {1 -> GrayLevel[0.94]}}, 
 Dividers -> {Thread[{1, 4} -> Directive[Thick, GrayLevel[0.7]]], 
   Thread[{1, 2, 6, 9} -> Directive[Thick, GrayLevel[0.7]]]}, 
 Frame -> All, FrameStyle -> GrayLevel[0.7], Alignment -> Left]

(These results asymptotically seem larger by a factor .)

So for k = 1, the limiting rulial multiway graph behaves like a 1-dimensional space, but for all k  2, it behaves like an infinite-dimensional space, in which the volumes of geodesic balls grow exponentially with volume.

Finite Tapes

So far we’ve always assumed that our Turing machine tape is unbounded. But in some ways it’s easier to see what’s going on if we instead limit the tape, so we have a finite total number of states (n s kn). One thing we can do is to consider a cyclic tape.

For s = k = 1 with successively longer tapes we then get:

NeighboringConfigurations
&#10005

Cell[CellGroupData[{
	Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurations", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{"s1", ",", 
          RowBox[{"Mod", "[", 
           RowBox[{
            RowBox[{"pos0", "+", "pos1"}], ",", 
            RowBox[{"Length", "[", "tape0", "]"}], ",", "1"}], 
           "]"}]}], "}"}], ",", "tape1"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphX", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurations", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"VertexShapeFunction", "\[Rule]", 
     RowBox[{"(", 
      RowBox[{
       RowBox[{"Inset", "[", 
        RowBox[{
         RowBox[{"Framed", "[", 
          RowBox[{
           RowBox[{"RulePlot", "[", 
            RowBox[{
             RowBox[{"TuringMachine", "[", 
              RowBox[{"{", 
               RowBox[{"0", ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"s", ",", "2"}], "]"}], ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"k", ",", "2"}], "]"}]}], "}"}], "]"}], ",", 
             
             RowBox[{"{", 
              RowBox[{
               RowBox[{"{", 
                RowBox[{"1", ",", 
                 RowBox[{"#2", "[", 
                  RowBox[{"[", 
                   RowBox[{"1", ",", "2"}], "]"}], "]"}]}], "}"}], 
               ",", 
               RowBox[{"#2", "[", 
                RowBox[{"[", "2", "]"}], "]"}]}], "}"}], ",", "0", 
             ",", 
             RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
             RowBox[{"Frame", "\[Rule]", "False"}], ",", 
             RowBox[{"ImageSize", "\[Rule]", "40"}]}], "]"}], ",", 
           RowBox[{"Background", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.2", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.45", ",", "0.87"}], "]"}]}], 
             "]"}]}], ",", 
           RowBox[{"FrameMargins", "\[Rule]", 
            RowBox[{"{", 
             RowBox[{
              RowBox[{"{", 
               RowBox[{"2", ",", "2"}], "}"}], ",", 
              RowBox[{"{", 
               RowBox[{"0", ",", "0"}], "}"}]}], "}"}]}], ",", 
           RowBox[{"RoundingRadius", "\[Rule]", "0"}], ",", 
           RowBox[{"FrameStyle", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.5", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.52", ",", "0.82"}], "]"}]}], 
             "]"}]}]}], "]"}], ",", "#1"}], "]"}], "&"}], ")"}]}], 
    ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<EdgeStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Show", "[", 
    RowBox[{
     RowBox[{"TMNCGraphX", "[", 
      RowBox[{"len", ",", 
       RowBox[{"{", 
        RowBox[{"1", ",", "1"}], "}"}]}], "]"}], ",", 
     RowBox[{"ImageSize", "\[Rule]", "200"}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"len", ",", "3", ",", "5"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

For s = 2, k = 1 we get:

NeighboringConfigurations
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurations", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{"s1", ",", 
          RowBox[{"Mod", "[", 
           RowBox[{
            RowBox[{"pos0", "+", "pos1"}], ",", 
            RowBox[{"Length", "[", "tape0", "]"}], ",", "1"}], 
           "]"}]}], "}"}], ",", "tape1"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

 Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphX", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurations", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"VertexShapeFunction", "\[Rule]", 
     RowBox[{"(", 
      RowBox[{
       RowBox[{"Inset", "[", 
        RowBox[{
         RowBox[{"Framed", "[", 
          RowBox[{
           RowBox[{"RulePlot", "[", 
            RowBox[{
             RowBox[{"TuringMachine", "[", 
              RowBox[{"{", 
               RowBox[{"0", ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"s", ",", "2"}], "]"}], ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"k", ",", "2"}], "]"}]}], "}"}], "]"}], ",", 
             
             RowBox[{"{", 
              RowBox[{
               RowBox[{"{", 
                RowBox[{"1", ",", 
                 RowBox[{"#2", "[", 
                  RowBox[{"[", 
                   RowBox[{"1", ",", "2"}], "]"}], "]"}]}], "}"}], 
               ",", 
               RowBox[{"#2", "[", 
                RowBox[{"[", "2", "]"}], "]"}]}], "}"}], ",", "0", 
             ",", 
             RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
             RowBox[{"Frame", "\[Rule]", "False"}], ",", 
             RowBox[{"ImageSize", "\[Rule]", "40"}]}], "]"}], ",", 
           RowBox[{"Background", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.2", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.45", ",", "0.87"}], "]"}]}], 
             "]"}]}], ",", 
           RowBox[{"FrameMargins", "->", 
            RowBox[{"{", 
             RowBox[{
              RowBox[{"{", 
               RowBox[{"2", ",", "2"}], "}"}], ",", 
              RowBox[{"{", 
               RowBox[{"0", ",", "0"}], "}"}]}], "}"}]}], ",", 
           RowBox[{"RoundingRadius", "\[Rule]", "0"}], ",", 
           RowBox[{"FrameStyle", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.5", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.52", ",", "0.82"}], "]"}]}], 
             "]"}]}]}], "]"}], ",", "#1"}], "]"}], "&"}], ")"}]}], 
    ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{"Directive", "[", 
      RowBox[{
       RowBox[{"Arrowheads", "[", "0.06", "]"}], ",", 
       RowBox[{"Hue", "[", 
        RowBox[{"0.75", ",", "0", ",", "0.35"}], "]"}], ",", 
       RowBox[{"Dashing", "[", "None", "]"}], ",", 
       RowBox[{"AbsoluteThickness", "[", "1", "]"}]}], "]"}]}]}], 
   "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Show", "[", 
    RowBox[{
     RowBox[{"TMNCGraphX", "[", 
      RowBox[{"len", ",", 
       RowBox[{"{", 
        RowBox[{"2", ",", "1"}], "}"}]}], "]"}], ",", 
     RowBox[{"ImageSize", "\[Rule]", "200"}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"len", ",", "3", ",", "5"}], "}"}]}], "]"}]], "Input"]
 }, Open  ]]

For tape size 10, the results for successive values of s are:

NeighboringConfigurations
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurations", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{"s1", ",", 
          RowBox[{"Mod", "[", 
           RowBox[{
            RowBox[{"pos0", "+", "pos1"}], ",", 
            RowBox[{"Length", "[", "tape0", "]"}], ",", "1"}], 
           "]"}]}], "}"}], ",", "tape1"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraph", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurations", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{"Directive", "[", 
      RowBox[{
       RowBox[{"Arrowheads", "[", "0.04", "]"}], ",", 
       RowBox[{"Hue", "[", 
        RowBox[{"0.75", ",", "0", ",", "0.35"}], "]"}], ",", 
       RowBox[{"Dashing", "[", "None", "]"}], ",", 
       RowBox[{"AbsoluteThickness", "[", "1", "]"}]}], "]"}]}], ",", 
    RowBox[{"VertexStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<VertexStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Labeled", "[", 
    RowBox[{
     RowBox[{"Show", "[", 
      RowBox[{
       RowBox[{"TMNCGraph", "[", 
        RowBox[{"10", ",", 
         RowBox[{"{", 
          RowBox[{"s", ",", "1"}], "}"}]}], "]"}], ",", 
       RowBox[{"ImageSize", "\[Rule]", "200"}]}], "]"}], ",", 
     RowBox[{"Text", "[", "s", "]"}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"s", ",", "3"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

If instead of having a cyclic tape, we just have a finite tape, and insist that the head never goes off either end, then for s = k = 1 we get:

NeighboringConfigurationsC
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurationsC", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"If", "[", 
       RowBox[{
        RowBox[{"1", "\[LessEqual]", 
         RowBox[{"pos0", "+", "pos1"}], "\[LessEqual]", 
         RowBox[{"Length", "[", "tape0", "]"}]}], ",", 
        RowBox[{"{", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{"s1", ",", 
            RowBox[{"pos0", "+", "pos1"}]}], "}"}], ",", "tape1"}], 
         "}"}], ",", "Nothing"}], "]"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphCX", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurationsC", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"VertexShapeFunction", "\[Rule]", 
     RowBox[{"(", 
      RowBox[{
       RowBox[{"Inset", "[", 
        RowBox[{
         RowBox[{"Framed", "[", 
          RowBox[{
           RowBox[{"RulePlot", "[", 
            RowBox[{
             RowBox[{"TuringMachine", "[", 
              RowBox[{"{", 
               RowBox[{"0", ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"s", ",", "2"}], "]"}], ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"k", ",", "2"}], "]"}]}], "}"}], "]"}], ",", 
             
             RowBox[{"{", 
              RowBox[{
               RowBox[{"{", 
                RowBox[{"1", ",", 
                 RowBox[{"#2", "[", 
                  RowBox[{"[", 
                   RowBox[{"1", ",", "2"}], "]"}], "]"}]}], "}"}], 
               ",", 
               RowBox[{"#2", "[", 
                RowBox[{"[", "2", "]"}], "]"}]}], "}"}], ",", "0", 
             ",", 
             RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
             RowBox[{"Frame", "\[Rule]", "False"}], ",", 
             RowBox[{"ImageSize", "\[Rule]", "40"}]}], "]"}], ",", 
           RowBox[{"Background", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.2", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.45", ",", "0.87"}], "]"}]}], 
             "]"}]}], ",", 
           RowBox[{"FrameMargins", "\[Rule]", 
            RowBox[{"{", 
             RowBox[{
              RowBox[{"{", 
               RowBox[{"2", ",", "2"}], "}"}], ",", 
              RowBox[{"{", 
               RowBox[{"0", ",", "0"}], "}"}]}], "}"}]}], ",", 
           RowBox[{"RoundingRadius", "\[Rule]", "0"}], ",", 
           RowBox[{"FrameStyle", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.5", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.52", ",", "0.82"}], "]"}]}], 
             "]"}]}]}], "]"}], ",", "#1"}], "]"}], "&"}], ")"}]}], 
    ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<EdgeStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Show", "[", 
    RowBox[{
     RowBox[{"TMNCGraphCX", "[", 
      RowBox[{"len", ",", 
       RowBox[{"{", 
        RowBox[{"1", ",", "1"}], "}"}]}], "]"}], ",", 
     RowBox[{"ImageSize", "\[Rule]", "200"}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"len", ",", "3", ",", "5"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

For s = 2, k = 1 we get

NeighboringConfigurationsC
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurationsC", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"If", "[", 
       RowBox[{
        RowBox[{"1", "\[LessEqual]", 
         RowBox[{"pos0", "+", "pos1"}], "\[LessEqual]", 
         RowBox[{"Length", "[", "tape0", "]"}]}], ",", 
        RowBox[{"{", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{"s1", ",", 
            RowBox[{"pos0", "+", "pos1"}]}], "}"}], ",", "tape1"}], 
         "}"}], ",", "Nothing"}], "]"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphCX", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurationsC", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"VertexShapeFunction", "\[Rule]", 
     RowBox[{"(", 
      RowBox[{
       RowBox[{"Inset", "[", 
        RowBox[{
         RowBox[{"Framed", "[", 
          RowBox[{
           RowBox[{"RulePlot", "[", 
            RowBox[{
             RowBox[{"TuringMachine", "[", 
              RowBox[{"{", 
               RowBox[{"0", ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"s", ",", "2"}], "]"}], ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"k", ",", "2"}], "]"}]}], "}"}], "]"}], ",", 
             
             RowBox[{"{", 
              RowBox[{
               RowBox[{"{", 
                RowBox[{"1", ",", 
                 RowBox[{"#2", "[", 
                  RowBox[{"[", 
                   RowBox[{"1", ",", "2"}], "]"}], "]"}]}], "}"}], 
               ",", 
               RowBox[{"#2", "[", 
                RowBox[{"[", "2", "]"}], "]"}]}], "}"}], ",", "0", 
             ",", 
             RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
             RowBox[{"Frame", "\[Rule]", "False"}], ",", 
             RowBox[{"ImageSize", "\[Rule]", "40"}]}], "]"}], ",", 
           RowBox[{"Background", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.2", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.45", ",", "0.87"}], "]"}]}], 
             "]"}]}], ",", 
           RowBox[{"FrameMargins", "\[Rule]", 
            RowBox[{"{", 
             RowBox[{
              RowBox[{"{", 
               RowBox[{"2", ",", "2"}], "}"}], ",", 
              RowBox[{"{", 
               RowBox[{"0", ",", "0"}], "}"}]}], "}"}]}], ",", 
           RowBox[{"RoundingRadius", "\[Rule]", "0"}], ",", 
           RowBox[{"FrameStyle", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.5", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.52", ",", "0.82"}], "]"}]}], 
             "]"}]}]}], "]"}], ",", "#1"}], "]"}], "&"}], ")"}]}], 
    ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{"Directive", "[", 
      RowBox[{
       RowBox[{"Arrowheads", "[", "0.06", "]"}], ",", 
       RowBox[{"Hue", "[", 
        RowBox[{"0.75", ",", "0", ",", "0.35"}], "]"}], ",", 
       RowBox[{"Dashing", "[", "None", "]"}], ",", 
       RowBox[{"AbsoluteThickness", "[", "1", "]"}]}], "]"}]}]}], 
   "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Show", "[", 
    RowBox[{
     RowBox[{"TMNCGraphCX", "[", 
      RowBox[{"len", ",", 
       RowBox[{"{", 
        RowBox[{"2", ",", "1"}], "}"}]}], "]"}], ",", 
     RowBox[{"ImageSize", "\[Rule]", "200"}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"len", ",", "3", ",", "5"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

and the overall behavior for successive s is exactly as we saw above for unbounded tapes:

NeighboringConfigurationsC
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurationsC", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"If", "[", 
       RowBox[{
        RowBox[{"1", "\[LessEqual]", 
         RowBox[{"pos0", "+", "pos1"}], "\[LessEqual]", 
         RowBox[{"Length", "[", "tape0", "]"}]}], ",", 
        RowBox[{"{", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{"s1", ",", 
            RowBox[{"pos0", "+", "pos1"}]}], "}"}], ",", "tape1"}], 
         "}"}], ",", "Nothing"}], "]"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphC", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurationsC", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{"Directive", "[", 
      RowBox[{
       RowBox[{"Arrowheads", "[", "0.03", "]"}], ",", 
       RowBox[{"Hue", "[", 
        RowBox[{"0.75", ",", "0", ",", "0.35"}], "]"}], ",", 
       RowBox[{"Dashing", "[", "None", "]"}], ",", 
       RowBox[{"AbsoluteThickness", "[", "1", "]"}]}], "]"}]}], ",", 
    RowBox[{"VertexStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<VertexStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Labeled", "[", 
    RowBox[{
     RowBox[{"Show", "[", 
      RowBox[{
       RowBox[{"TMNCGraphC", "[", 
        RowBox[{"10", ",", 
         RowBox[{"{", 
          RowBox[{"s", ",", "1"}], "}"}]}], "]"}], ",", 
       RowBox[{"ImageSize", "\[Rule]", "200"}]}], "]"}], ",", 
     RowBox[{"Style", "[", 
      RowBox[{
       RowBox[{"Text", "[", "s", "]"}], ",", "10"}], "]"}]}], "]"}], 
   ",", 
   RowBox[{"{", 
    RowBox[{"s", ",", "3"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

For s = 1, k = 2, this is what happens in the cyclic case for length 3:

NeighboringConfigurations
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurations", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{"s1", ",", 
          RowBox[{"Mod", "[", 
           RowBox[{
            RowBox[{"pos0", "+", "pos1"}], ",", 
            RowBox[{"Length", "[", "tape0", "]"}], ",", "1"}], 
           "]"}]}], "}"}], ",", "tape1"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphX", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurations", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"VertexShapeFunction", "\[Rule]", 
     RowBox[{"(", 
      RowBox[{
       RowBox[{"Inset", "[", 
        RowBox[{
         RowBox[{"Framed", "[", 
          RowBox[{
           RowBox[{"RulePlot", "[", 
            RowBox[{
             RowBox[{"TuringMachine", "[", 
              RowBox[{"{", 
               RowBox[{"0", ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"s", ",", "2"}], "]"}], ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"k", ",", "2"}], "]"}]}], "}"}], "]"}], ",", 
             
             RowBox[{"{", 
              RowBox[{
               RowBox[{"{", 
                RowBox[{"1", ",", 
                 RowBox[{"#2", "[", 
                  RowBox[{"[", 
                   RowBox[{"1", ",", "2"}], "]"}], "]"}]}], "}"}], 
               ",", 
               RowBox[{"#2", "[", 
                RowBox[{"[", "2", "]"}], "]"}]}], "}"}], ",", "0", 
             ",", 
             RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
             RowBox[{"Frame", "\[Rule]", "False"}], ",", 
             RowBox[{"ImageSize", "\[Rule]", "40"}]}], "]"}], ",", 
           RowBox[{"Background", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.2", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.45", ",", "0.87"}], "]"}]}], 
             "]"}]}], ",", 
           RowBox[{"FrameMargins", "->", 
            RowBox[{"{", 
             RowBox[{
              RowBox[{"{", 
               RowBox[{"2", ",", "2"}], "}"}], ",", 
              RowBox[{"{", 
               RowBox[{"0", ",", "0"}], "}"}]}], "}"}]}], ",", 
           RowBox[{"RoundingRadius", "\[Rule]", "0"}], ",", 
           RowBox[{"FrameStyle", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.5", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.52", ",", "0.82"}], "]"}]}], 
             "]"}]}]}], "]"}], ",", "#1"}], "]"}], "&"}], ")"}]}], 
    ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<EdgeStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"TMNCGraphX", "[", 
  RowBox[{"3", ",", 
   RowBox[{"{", 
    RowBox[{"1", ",", "2"}], "}"}]}], "]"}]], "Input"]

}, Open  ]]

The results for lengths 1 through 6 are:

NeighboringConfigurations
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurations", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{"s1", ",", 
          RowBox[{"Mod", "[", 
           RowBox[{
            RowBox[{"pos0", "+", "pos1"}], ",", 
            RowBox[{"Length", "[", "tape0", "]"}], ",", "1"}], 
           "]"}]}], "}"}], ",", "tape1"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraph", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurations", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<EdgeStyle\>\"", 
      "]"}]}], ",", 
    RowBox[{"VertexStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<VertexStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Graph", "[", 
    RowBox[{
     RowBox[{"TMNCGraph", "[", 
      RowBox[{"n", ",", 
       RowBox[{"{", 
        RowBox[{"1", ",", "2"}], "}"}]}], "]"}], ",", 
     RowBox[{"ImageSize", "\[Rule]", "200"}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"n", ",", "6"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

Rendering these in 3D makes the connection with progressively high-dimensional hypercubes slightly clearer:

NeighboringConfigurations
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurations", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{"s1", ",", 
          RowBox[{"Mod", "[", 
           RowBox[{
            RowBox[{"pos0", "+", "pos1"}], ",", 
            RowBox[{"Length", "[", "tape0", "]"}], ",", "1"}], 
           "]"}]}], "}"}], ",", "tape1"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraph", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurations", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\^lt;StatesGraph\>\"", "]"}], "[", "\"\<EdgeStyle\>\"", 
      "]"}]}], ",", 
    RowBox[{"VertexStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<VertexStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Graph3D", "[", 
    RowBox[{
     RowBox[{"TMNCGraph", "[", 
      RowBox[{"n", ",", 
       RowBox[{"{", 
        RowBox[{"1", ",", "2"}], "}"}]}], "]"}], ",", 
     RowBox[{"ImageSize", "\[Rule]", "200"}], ",", 
     RowBox[{"EdgeStyle", "\[Rule]", 
      RowBox[{"Directive", "[", 
       RowBox[{
        RowBox[{"Hue", "[", 
         RowBox[{"0.62", ",", "0.05", ",", "0.55"}], "]"}], ",", 
        RowBox[{"Opacity", "[", ".6", "]"}]}], "]"}]}]}], "]"}], ",", 
   
   RowBox[{"{", 
    RowBox[{"n", ",", "6"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

The non-cyclic case for lengths 2 through 6 (length 1 is trivial):

NeighboringConfigurationsC
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurationsC", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"If", "[", 
       RowBox[{
        RowBox[{"1", "\[LessEqual]", 
         RowBox[{"pos0", "+", "pos1"}], "\[LessEqual]", 
         RowBox[{"Length", "[", "tape0", "]"}]}], ",", 
        RowBox[{"{", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{"s1", ",", 
            RowBox[{"pos0", "+", "pos1"}]}], "}"}], ",", "tape1"}], 
         "}"}], ",", "Nothing"}], "]"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphC", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurationsC", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<EdgeStyle\>\"", 
      "]"}]}], ",", 
    RowBox[{"VertexStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<VertexStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Graph", "[", 
    RowBox[{
     RowBox[{"TMNCGraphC", "[", 
      RowBox[{"n", ",", 
       RowBox[{"{", 
        RowBox[{"1", ",", "2"}], "}"}]}], "]"}], ",", 
     RowBox[{"ImageSize", "\[Rule]", "200"}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"n", ",", "2", ",", "6"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

Rendered in 3D these become:

NeighboringConfigurationsC
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurationsC", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"If", "[", 
       RowBox[{
        RowBox[{"1", "\[LessEqual]", 
         RowBox[{"pos0", "+", "pos1"}], "\[LessEqual]", 
         RowBox[{"Length", "[", "tape0", "]"}]}], ",", 
        RowBox[{"{", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{"s1", ",", 
            RowBox[{"pos0", "+", "pos1"}]}], "}"}], ",", "tape1"}], 
         "}"}], ",", "Nothing"}], "]"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphC", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurationsC", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<EdgeStyle\>\"", 
      "]"}]}], ",", 
    RowBox[{"VertexStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<VertexStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Graph3D", "[", 
    RowBox[{
     RowBox[{"TMNCGraphC", "[", 
      RowBox[{"n", ",", 
       RowBox[{"{", 
        RowBox[{"1", ",", "2"}], "}"}]}], "]"}], ",", 
     RowBox[{"ImageSize", "\[Rule]", "200"}], ",", 
     RowBox[{"VertexStyle", "\[Rule]", " ", 
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       RowBox[{"\"\<StatesGraph3D\>\"", ",", "\"\<VertexStyle\>\""}], 
       "]"}]}], ",", 
     RowBox[{"EdgeStyle", "\[Rule]", " ", 
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       RowBox[{"\"\<StatesGraph3D\>\"", ",", "\"\<EdgeStyle\>\""}], 
       "]"}]}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"n", ",", "2", ",", "6"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

In the case s = 2, k = 2 for a length-3 cyclic tape we get:

NeighboringConfigurations
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurations", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{"s1", ",", 
          RowBox[{"Mod", "[", 
           RowBox[{
            RowBox[{"pos0", "+", "pos1"}], ",", 
            RowBox[{"Length", "[", "tape0", "]"}], ",", "1"}], 
           "]"}]}], "}"}], ",", "tape1"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphX", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurations", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"VertexShapeFunction", "\[Rule]", 
     RowBox[{"(", 
      RowBox[{
       RowBox[{"Inset", "[", 
        RowBox[{
         RowBox[{"Framed", "[", 
          RowBox[{
           RowBox[{"RulePlot", "[", 
            RowBox[{
             RowBox[{"TuringMachine", "[", 
              RowBox[{"{", 
               RowBox[{"0", ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"s", ",", "2"}], "]"}], ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"k", ",", "2"}], "]"}]}], "}"}], "]"}], ",", 
             
             RowBox[{"{", 
              RowBox[{
               RowBox[{"{", 
                RowBox[{"1", ",", 
                 RowBox[{"#2", "[", 
                  RowBox[{"[", 
                   RowBox[{"1", ",", "2"}], "]"}], "]"}]}], "}"}], 
               ",", 
               RowBox[{"#2", "[", 
                RowBox[{"[", "2", "]"}], "]"}]}], "}"}], ",", "0", 
             ",", 
             RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
             RowBox[{"Frame", "\[Rule]", "False"}], ",", 
             RowBox[{"ImageSize", "\[Rule]", "40"}]}], "]"}], ",", 
           RowBox[{"Background", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.2", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.45", ",", "0.87"}], "]"}]}], 
             "]"}]}], ",", 
           RowBox[{"FrameMargins", "->", 
            RowBox[{"{", 
             RowBox[{
              RowBox[{"{", 
               RowBox[{"2", ",", "2"}], "}"}], ",", 
              RowBox[{"{", 
               RowBox[{"0", ",", "0"}], "}"}]}], "}"}]}], ",", 
           RowBox[{"RoundingRadius", "\[Rule]", "0"}], ",", 
           RowBox[{"FrameStyle", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.5", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.52", ",", "0.82"}], "]"}]}], 
             "]"}]}]}], "]"}], ",", "#1"}], "]"}], "&"}], ")"}]}], 
    ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{"Directive", "[", 
      RowBox[{
       RowBox[{"Arrowheads", "[", "0.02", "]"}], ",", 
       RowBox[{"Hue", "[", 
        RowBox[{"0.75", ",", "0", ",", "0.35"}], "]"}], ",", 
       RowBox[{"Dashing", "[", "None", "]"}], ",", 
       RowBox[{"AbsoluteThickness", "[", "1", "]"}]}], "]"}]}]}], 
   "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"TMNCGraphX", "[", 
  RowBox[{"3", ",", 
   RowBox[{"{", 
    RowBox[{"2", ",", "2"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

Rendering the results for lengths 1 through 6 in 3D gives:

NeighboringConfigurations
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurations", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{"s1", ",", 
          RowBox[{"Mod", "[", 
           RowBox[{
            RowBox[{"pos0", "+", "pos1"}], ",", 
            RowBox[{"Length", "[", "tape0", "]"}], ",", "1"}], 
           "]"}]}], "}"}], ",", "tape1"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraph", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurations", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<EdgeStyle\>\"", 
      "]"}]}], ",", 
    RowBox[{"VertexStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<VertexStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Graph3D", "[", 
    RowBox[{
     RowBox[{"TMNCGraph", "[", 
      RowBox[{"n", ",", 
       RowBox[{"{", 
        RowBox[{"2", ",", "2"}], "}"}]}], "]"}], ",", 
     RowBox[{"ImageSize", "\[Rule]", "260"}], ",", 
     RowBox[{"VertexStyle", "\[Rule]", " ", 
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       RowBox[{"\"\<StatesGraph3D\>\"", ",", "\"\<VertexStyle\>\""}], 
       "]"}]}], ",", 
     RowBox[{"EdgeStyle", "\[Rule]", " ", 
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       RowBox[{"\"\<StatesGraph3D\>\"", ",", "\"\<EdgeStyle\>\""}], 
       "]"}]}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"n", ",", "6"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

In the non-cyclic case the results for lengths 2 through 6 in 3D are (the length-1 case is trivial):

NeighboringConfigurationsC
&#10005

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurationsC", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"If", "[", 
       RowBox[{
        RowBox[{"1", "\[LessEqual]", 
         RowBox[{"pos0", "+", "pos1"}], "\[LessEqual]", 
         RowBox[{"Length", "[", "tape0", "]"}]}], ",", 
        RowBox[{"{", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{"s1", ",", 
            RowBox[{"pos0", "+", "pos1"}]}], "}"}], ",", "tape1"}], 
         "}"}], ",", "Nothing"}], "]"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphC", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurationsC", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<EdgeStyle\>\"", 
      "]"}]}], ",", 
    RowBox[{"VertexStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<VertexStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Graph3D", "[", 
    RowBox[{
     RowBox[{"TMNCGraphC", "[", 
      RowBox[{"n", ",", 
       RowBox[{"{", 
        RowBox[{"2", ",", "2"}], "}"}]}], "]"}], ",", 
     RowBox[{"ImageSize", "\[Rule]", "260"}], ",", 
     RowBox[{"VertexStyle", "\[Rule]", " ", 
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       RowBox[{"\"\<StatesGraph3D\>\"", ",", "\"\<VertexStyle\>\""}], 
       "]"}]}], ",", 
     RowBox[{"EdgeStyle", "\[Rule]", " ", 
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       RowBox[{"\"\<StatesGraph3D\>\"", ",", "\"\<EdgeStyle\>\""}], 
       "]"}]}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"n", ",", "2", ",", "6"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

The Turing Machine Group

It turns out that there’s a nice mathematical characterization of rulial multiway graphs for Turing machines: they’re just Cayley graphs of groups that we can call “Turing machine groups”. Why is this? Basically it’s because the possible configurations of a Turing machine have a direct correspondence with transformations that can act on these configurations. And in particular, one can pick out certain transformations that correspond to individual transitions in a non-deterministic Turing machine, and use these as generators in a presentation of the group.

Let’s start by considering the case of Turing machines with finite cyclic tapes. If the tape has length n, the total number of possible configurations of the machine is n s kn. (Note that if the tape is finite but not cyclic then one doesn’t get a group.)

Assume for now s = 1, k = 2. Then for n = 3, there are 24 possible configurations, and the rulial multiway graph is:

TMNCGraphX
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"NeighboringConfigurations", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s0_Integer", ",", "pos0_Integer"}], "}"}], ",", 
      "tape0_List"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Flatten", "[", 
   RowBox[{
    RowBox[{"Table", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{"s1", ",", 
          RowBox[{"Mod", "[", 
           RowBox[{
            RowBox[{"pos0", "+", "pos1"}], ",", 
            RowBox[{"Length", "[", "tape0", "]"}], ",", "1"}], 
           "]"}]}], "}"}], ",", "tape1"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"s1", ",", "s"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"pos1", ",", "offs"}], "}"}], ",", 
      RowBox[{"{", 
       RowBox[{"tape1", ",", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"ReplacePart", "[", 
           RowBox[{"tape0", ",", 
            RowBox[{"pos0", "\[Rule]", "i"}]}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"i", ",", "0", ",", 
            RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], "}"}]}], 
     "]"}], ",", "2"}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"TMNCGraphX", "[", 
   RowBox[{"tlen_Integer", ",", 
    RowBox[{"{", 
     RowBox[{"s_Integer", ",", "k_Integer"}], "}"}], ",", 
    RowBox[{"offs_", ":", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", "1"}], ",", "1"}], "}"}]}]}], "]"}], ":=", 
  RowBox[{"Graph", "[", 
   RowBox[{
    RowBox[{"Flatten", "[", 
     RowBox[{"Table", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], "\[DirectedEdge]", "#"}], "&"}], "/@", 
        RowBox[{"NeighboringConfigurations", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", 
             RowBox[{"s0", ",", "pos0"}], "}"}], ",", "tape0"}], 
           "}"}], ",", 
          RowBox[{"{", 
           RowBox[{"s", ",", "k"}], "}"}], ",", "offs"}], "]"}]}], 
       ",", 
       RowBox[{"{", 
        RowBox[{"s0", ",", "s"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"pos0", ",", "tlen"}], "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"tape0", ",", 
         RowBox[{"Tuples", "[", 
          RowBox[{
           RowBox[{"Range", "[", 
            RowBox[{"0", ",", 
             RowBox[{"k", "-", "1"}]}], "]"}], ",", "tlen"}], "]"}]}],
         "}"}]}], "]"}], "]"}], ",", 
    RowBox[{"VertexShapeFunction", "\[Rule]", 
     RowBox[{"(", 
      RowBox[{
       RowBox[{"Inset", "[", 
        RowBox[{
         RowBox[{"Framed", "[", 
          RowBox[{
           RowBox[{"RulePlot", "[", 
            RowBox[{
             RowBox[{"TuringMachine", "[", 
              RowBox[{"{", 
               RowBox[{"0", ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"s", ",", "2"}], "]"}], ",", 
                RowBox[{"Max", "[", 
                 RowBox[{"k", ",", "2"}], "]"}]}], "}"}], "]"}], ",", 
             
             RowBox[{"{", 
              RowBox[{
               RowBox[{"{", 
                RowBox[{"1", ",", 
                 RowBox[{"#2", "[", 
                  RowBox[{"[", 
                   RowBox[{"1", ",", "2"}], "]"}], "]"}]}], "}"}], 
               ",", 
               RowBox[{"#2", "[", 
                RowBox[{"[", "2", "]"}], "]"}]}], "}"}], ",", "0", 
             ",", 
             RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
             RowBox[{"Frame", "\[Rule]", "False"}], ",", 
             RowBox[{"ImageSize", "\[Rule]", "40"}]}], "]"}], ",", 
           RowBox[{"Background", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.2", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.45", ",", "0.87"}], "]"}]}], 
             "]"}]}], ",", 
           RowBox[{"FrameMargins", "\[Rule]", 
            RowBox[{"{", 
             RowBox[{
              RowBox[{"{", 
               RowBox[{"2", ",", "2"}], "}"}], ",", 
              RowBox[{"{", 
               RowBox[{"0", ",", "0"}], "}"}]}], "}"}]}], ",", 
           RowBox[{"RoundingRadius", "\[Rule]", "0"}], ",", 
           RowBox[{"FrameStyle", "\[Rule]", 
            RowBox[{"Directive", "[", 
             RowBox[{
              RowBox[{"Opacity", "[", "0.5", "]"}], ",", 
              RowBox[{"Hue", "[", 
               RowBox[{"0.62", ",", "0.52", ",", "0.82"}], "]"}]}], 
             "]"}]}]}], "]"}], ",", "#1"}], "]"}], "&"}], ")"}]}], 
    ",", 
    RowBox[{"EdgeStyle", "\[Rule]", 
     RowBox[{
      RowBox[{
       RowBox[{
       "ResourceFunction", "[", 
        "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
       "\"\<StatesGraph\>\"", "]"}], "[", "\"\<EdgeStyle\>\"", 
      "]"}]}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"TMNCGraphX", "[", 
  RowBox[{"3", ",", 
   RowBox[{"{", 
    RowBox[{"1", ",", "2"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

But this graph turns out to be a Cayley graph for the finite group A4 × 2:

{Graph
&#10005

{Graph[#, ImageSize -> 300], Graph3D[#, ImageSize -> 300]} &@
 CayleyGraph[
  PermutationGroup[
   PermutationCycles /@ 
    FiniteGroupData[{"DirectProduct", {{"AlternatingGroup", 
         4}, {"CyclicGroup", 2}}}, "MultiplicationTable"][[{3, 5, 10, 
      22}]]]]

To construct this Cayley graph let’s represent the configurations of the Turing machine by pairs of integers , where 0  i  n – 1 gives the position of the head, and the bits of u (with 0  u  2n – 1) give the values on the tape. (Since s = 1, we don’t have to worry about the state of the head.) With this representation of the configurations, consider the “multiplication” operation:

f
&#10005

f[{i_, u_}, {j_, v_}] := {Mod[i + j, n], 
  BitXor[BitShiftRight[u, j], v]} 

When this operation acts on the configurations it defines a group. Here’s the multiplication table for n = 3:

GraphicsGrid
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"op", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"i_", ",", "u_"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"j_", ",", "v_"}], "}"}]}], "]"}], ":=", 
  RowBox[{"{", 
   RowBox[{
    RowBox[{"Mod", "[", 
     RowBox[{
      RowBox[{"i", "+", "j"}], ",", "n"}], "]"}], ",", 
    RowBox[{"BitXor", "[", 
     RowBox[{
      RowBox[{"BitShiftRight", "[", 
       RowBox[{"u", ",", "j"}], "]"}], ",", "v"}], "]"}]}], "}"}], 
  " "}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"tmdec", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"i_", ",", "u_"}], "}"}], ",", "n_", ",", 
    RowBox[{"sz_", ":", "Automatic"}]}], "]"}], ":=", 
  RowBox[{"RulePlot", "[", 
   RowBox[{
    RowBox[{"TuringMachine", "[", "2506", "]"}], ",", 
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"1", ",", 
        RowBox[{"i", "+", "1"}]}], "}"}], ",", 
      RowBox[{"IntegerDigits", "[", 
       RowBox[{"u", ",", "2", ",", "n"}], "]"}]}], "}"}], ",", "0", 
    ",", 
    RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
    RowBox[{"Frame", "\[Rule]", "None"}], ",", 
    RowBox[{"ImageSize", "\[Rule]", "sz"}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"Block", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"n", "=", "3"}], "}"}], ",", 
    RowBox[{"With", "[", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"elems", "=", 
        RowBox[{"Catenate", "[", 
         RowBox[{"Table", "[", 
          RowBox[{
           RowBox[{"{", 
            RowBox[{"i", ",", "u"}], "}"}], ",", 
           RowBox[{"{", 
            RowBox[{"u", ",", "0", ",", 
             RowBox[{
              RowBox[{"2", "^", "n"}], "-", "1"}]}], "}"}], ",", 
           RowBox[{"{", 
            RowBox[{"i", ",", "0", ",", 
             RowBox[{"n", "-", "1"}]}], "}"}]}], "]"}], "]"}]}], 
       "}"}], ",", 
      RowBox[{"Outer", "[", 
       RowBox[{"op", ",", "elems", ",", "elems", ",", "1"}], "]"}]}], 
     "]"}]}], "]"}], ";"}]], "Input"],

Cell[BoxData[
 RowBox[{"GraphicsGrid", "[", 
  RowBox[{
   RowBox[{"Map", "[", 
    RowBox[{
     RowBox[{
      RowBox[{"tmdec", "[", 
       RowBox[{"#", ",", "3", ",", "20"}], "]"}], "&"}], ",", "%", 
     ",", 
     RowBox[{"{", "2", "}"}]}], "]"}], ",", 
   RowBox[{"Frame", "\[Rule]", "All"}]}], "]"}]], "Input"]
}, Open  ]]

Or equivalently:

With
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"op", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"i_", ",", "u_"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"j_", ",", "v_"}], "}"}]}], "]"}], ":=", 
  RowBox[{"{", 
   RowBox[{
    RowBox[{"Mod", "[", 
     RowBox[{
      RowBox[{"i", "+", "j"}], ",", "n"}], "]"}], ",", 
    RowBox[{"BitXor", "[", 
     RowBox[{
      RowBox[{"BitShiftRight", "[", 
       RowBox[{"u", ",", "j"}], "]"}], ",", "v"}], "]"}]}], "}"}], 
  " "}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"cf", "=", 
   RowBox[{
    RowBox[{"Blend", "[", 
     RowBox[{"System`PlotThemeDump`$ThemeDefaultMatrix", ",", "#1"}], 
     "]"}], "&"}]}], ";"}]], "Input"],

Cell[BoxData[
 RowBox[{"With", "[", 
  RowBox[{
   RowBox[{"{", 
    RowBox[{"data", "=", 
     RowBox[{"Map", "[", 
      RowBox[{
       RowBox[{
        RowBox[{
         RowBox[{"#", "[", 
          RowBox[{"[", "1", "]"}], "]"}], "+", 
         RowBox[{"2", 
          RowBox[{"#", "[", 
           RowBox[{"[", "2", "]"}], "]"}]}]}], "&"}], ",", 
       RowBox[{"Block", "[", 
        RowBox[{
         RowBox[{"{", 
          RowBox[{"n", "=", "3"}], "}"}], ",", 
         RowBox[{"With", "[", 
          RowBox[{
           RowBox[{"{", 
            RowBox[{"elems", "=", 
             RowBox[{"Catenate", "[", 
              RowBox[{"Table", "[", 
               RowBox[{
                RowBox[{"{", 
                 RowBox[{"i", ",", "u"}], "}"}], ",", 
                RowBox[{"{", 
                 RowBox[{"u", ",", "0", ",", 
                  RowBox[{
                   RowBox[{"2", "^", "n"}], "-", "1"}]}], "}"}], ",", 
                
                RowBox[{"{", 
                 RowBox[{"i", ",", "0", ",", 
                  RowBox[{"n", "-", "1"}]}], "}"}]}], "]"}], "]"}]}], 
            "}"}], ",", 
           RowBox[{"Outer", "[", 
            RowBox[{"op", ",", "elems", ",", "elems", ",", "1"}], 
            "]"}]}], "]"}]}], "]"}], ",", 
       RowBox[{"{", "2", "}"}]}], "]"}]}], "}"}], ",", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"ArrayPlot", "[", 
      RowBox[{"data", ",", 
       RowBox[{"Axes", "\[Rule]", "None"}], ",", 
       RowBox[{"ColorFunction", "\[Rule]", "cf"}], ",", 
       RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
       RowBox[{"Frame", "\[Rule]", "None"}]}], "]"}], ",", 
     RowBox[{"Show", "[", 
      RowBox[{
       RowBox[{
        RowBox[{"ListPointPlot3D", "[", 
         RowBox[{
          RowBox[{"Reverse", "[", "data", "]"}], ",", 
          RowBox[{"Axes", "\[Rule]", "None"}], ",", 
          RowBox[{"ColorFunction", "\[Rule]", 
           RowBox[{"(", 
            RowBox[{
             RowBox[{"cf", "[", "#3", "]"}], "&"}], ")"}]}], ",", 
          RowBox[{"DataRange", "\[Rule]", "All"}], ",", 
          RowBox[{"BoxRatios", "\[Rule]", "1"}], ",", 
          RowBox[{"Lighting", "\[Rule]", "\"\<Neutral\>\""}], ",", 
          RowBox[{"PlotStyle", "\[Rule]", 
           RowBox[{"EdgeForm", "[", "]"}]}]}], "]"}], "/.", 
        RowBox[{"Point", "\[Rule]", "Cuboid"}]}], ",", 
       RowBox[{"PlotRange", "\[Rule]", "All"}]}], "]"}]}], "}"}]}], 
  "]"}]], "Input"]
}, Open  ]]

But now consider the four elements , (position –1 wraps around on the cyclic tape):

tmdec
&#10005

Cell[CellGroupData[{
    Cell[BoxData[
 RowBox[{
  RowBox[{"tmdec", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"i_", ",", "u_"}], "}"}], ",", "n_", ",", 
    RowBox[{"sz_", ":", "Automatic"}]}], "]"}], ":=", 
  RowBox[{"RulePlot", "[", 
   RowBox[{
    RowBox[{"TuringMachine", "[", "2506", "]"}], ",", 
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"1", ",", 
        RowBox[{"i", "+", "1"}]}], "}"}], ",", 
      RowBox[{"IntegerDigits", "[", 
       RowBox[{"u", ",", "2", ",", "n"}], "]"}]}], "}"}], ",", "0", 
    ",", 
    RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
    RowBox[{"Frame", "\[Rule]", "None"}], ",", 
    RowBox[{"ImageSize", "\[Rule]", "sz"}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{
   RowBox[{"tmdec", "[", 
    RowBox[{"#", ",", "3", ",", "50"}], "]"}], "&"}], "/@", 
  RowBox[{"{", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"1", ",", "0"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"2", ",", "0"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"1", ",", "1"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"2", ",", "1"}], "}"}]}], "}"}]}]], "Input"]
}, Open  ]]

We can consider these as the result of applying the 4 possible Turing machine transitions

ElementaryTuringGraphic
&#10005

Cell[CellGroupData[{
Cell[BoxData[{
 RowBox[{
  RowBox[{"CloudGet", "[", 
   RowBox[{
   "CloudObject", "[", 
    "\"\<https://www.wolframcloud.com/obj/wolframphysics/Bulletin/\
DeltaTM.wl\>\"", "]"}], "]"}], ";"}], "\[IndentingNewLine]", 
 RowBox[{
  RowBox[{
   RowBox[{"tmg0", "[", 
    RowBox[{
     RowBox[{
      RowBox[{"{", 
       RowBox[{"s_", ",", "a_"}], "}"}], "\[Rule]", 
      RowBox[{"{", 
       RowBox[{"sp_", ",", "ap_", ",", "dir_"}], "}"}]}], ",", 
     "stot_", ",", "k_"}], "]"}], ":=", 
   RowBox[{"With", "[", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{"cf", "=", 
       RowBox[{"Apply", "[", 
        RowBox[{"Function", ",", 
         RowBox[{"{", 
          RowBox[{"Piecewise", "[", 
           RowBox[{
            RowBox[{"Table", "[", 
             RowBox[{
              RowBox[{"{", 
               RowBox[{
                RowBox[{"Blend", "[", 
                 RowBox[{
                  RowBox[{"{", 
                   RowBox[{
                    RowBox[{"RGBColor", "[", 
                    RowBox[{"0.977", ",", "0.952", ",", "0."}], "]"}],
                     ",", 
                    RowBox[{"RGBColor", "[", 
                    RowBox[{"0.965", ",", "0.401", ",", "0.18"}], 
                    "]"}]}], "}"}], ",", 
                  RowBox[{"If", "[", 
                   RowBox[{
                    RowBox[{"k", "\[LessEqual]", "2"}], ",", 
                    RowBox[{"1", "/", "2"}], ",", 
                    RowBox[{"i", "/", 
                    RowBox[{"(", 
                    RowBox[{"k", "-", "2"}], ")"}]}]}], "]"}]}], 
                 "]"}], ",", 
                RowBox[{"#", ">", "i"}]}], "}"}], ",", 
              RowBox[{"{", 
               RowBox[{"i", ",", 
                RowBox[{"k", "-", "2"}], ",", "0", ",", 
                RowBox[{"-", "1"}]}], "}"}]}], "]"}], ",", "White"}], 
           "]"}], "}"}]}], "]"}]}], "}"}], ",", 
     RowBox[{"Graphics", "[", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{
         RowBox[{"{", 
          RowBox[{"White", ",", 
           RowBox[{"Rectangle", "[", 
            RowBox[{
             RowBox[{"Scaled", "[", 
              RowBox[{"{", 
               RowBox[{"0", ",", "0"}], "}"}], "]"}], ",", 
             RowBox[{"Scaled", "[", 
              RowBox[{"{", 
               RowBox[{"1", ",", "1"}], "}"}], "]"}]}], "]"}]}], 
          "}"}], ",", 
         RowBox[{"{", 
          RowBox[{
           RowBox[{"Directive", "[", 
            RowBox[{
             RowBox[{"EdgeForm", "[", 
              RowBox[{"Directive", "[", 
               RowBox[{
                RowBox[{"GrayLevel", "[", ".6", "]"}], ",", 
                RowBox[{"AbsoluteThickness", "[", "0.7", "]"}]}], 
               "]"}], "]"}], ",", 
             RowBox[{"cf", "[", "a", "]"}]}], "]"}], ",", 
           RowBox[{"Rectangle", "[", 
            RowBox[{
             RowBox[{"{", 
              RowBox[{"1", ",", "0"}], "}"}], ",", 
             RowBox[{"{", 
              RowBox[{"2", ",", "1"}], "}"}]}], "]"}]}], "}"}], ",", 
         RowBox[{"{", 
          RowBox[{
           RowBox[{"Directive", "[", 
            RowBox[{
             RowBox[{"EdgeForm", "[", 
              RowBox[{"Directive", "[", 
               RowBox[{
                RowBox[{"GrayLevel", "[", ".6", "]"}], ",", 
                RowBox[{"AbsoluteThickness", "[", "0.7", "]"}]}], 
               "]"}], "]"}], ",", 
             RowBox[{"cf", "[", "ap", "]"}]}], "]"}], ",", 
           RowBox[{"Rectangle", "[", 
            RowBox[{
             RowBox[{"{", 
              RowBox[{"1", ",", 
               RowBox[{
                RowBox[{"-", "5"}], "/", "4"}]}], "}"}], ",", 
             RowBox[{"{", 
              RowBox[{"2", ",", 
               RowBox[{
                RowBox[{"-", "1"}], "/", "4"}]}], "}"}]}], "]"}]}], 
          "}"}], ",", 
         RowBox[{"{", 
          RowBox[{
           RowBox[{
           "NKSSpecialFunctions`RulePlot`Dump`TuringMarker", "[", 
            RowBox[{
             RowBox[{"{", 
              RowBox[{"1.5", ",", "0.5"}], "}"}], ",", 
             RowBox[{"{", 
              RowBox[{"s", ",", "stot"}], "}"}]}], "]"}], ",", 
           RowBox[{
           "NKSSpecialFunctions`RulePlot`Dump`TuringMarker", "[", 
            RowBox[{
             RowBox[{"{", 
              RowBox[{
               RowBox[{"1.5", "+", "dir"}], ",", 
               RowBox[{
                RowBox[{"-", "3"}], "/", "4"}]}], "}"}], ",", 
             RowBox[{"{", 
              RowBox[{"sp", ",", "stot"}], "}"}]}], "]"}]}], "}"}]}], 
        "}"}], ",", 
       RowBox[{"PlotRange", "\[Rule]", 
        RowBox[{"{", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{
            RowBox[{
             RowBox[{"-", "1"}], "/", "2"}], ",", 
            RowBox[{"3", "+", 
             RowBox[{"1", "/", "2"}]}]}], "}"}], ",", 
          RowBox[{"{", 
           RowBox[{
            RowBox[{
             RowBox[{"-", "7"}], "/", "4"}], ",", 
            RowBox[{"3", "/", "2"}]}], "}"}]}], "}"}]}]}], "]"}]}], 
    "]"}]}], ";"}], "\[IndentingNewLine]", 
 RowBox[{
  RowBox[{
   RowBox[{"ElementaryTuringGraphic", "[", 
    RowBox[{"rules_List", ",", 
     RowBox[{"s_Integer", ":", "2"}], ",", 
     RowBox[{"k_Integer", ":", "2"}], ",", "opts___"}], "]"}], ":=", 
   RowBox[{"Table", "[", 
    RowBox[{
     RowBox[{
     "NKSSpecialFunctions`RulePlot`Dump`AtlasGraphicsGrid", "[", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"{", 
         RowBox[{"tmg0", "[", 
          RowBox[{"r", ",", "s", ",", "k"}], "]"}], "}"}], "}"}], ",",
        "opts", ",", 
       RowBox[{"Frame", "\[Rule]", "True"}]}], "]"}], ",", 
     RowBox[{"{", 
      RowBox[{"r", ",", "rules"}], "}"}]}], "]"}]}], ";"}]}], "Input"],

Cell[BoxData[
 RowBox[{"With", "[", 
  RowBox[{
   RowBox[{"{", 
    RowBox[{
     RowBox[{"s", " ", "=", " ", "1"}], ",", " ", 
     RowBox[{"k", " ", "=", " ", "2"}]}], "}"}], ",", " ", 
   RowBox[{"ElementaryTuringGraphic", "[", 
    RowBox[{
     RowBox[{"Flatten", "[", 
      RowBox[{"Table", "[", 
       RowBox[{
        RowBox[{"DeltaTMRule", "[", 
         RowBox[{
          RowBox[{"{", 
           RowBox[{"si", ",", " ", "ki"}], "}"}], ",", " ", 
          RowBox[{"{", 
           RowBox[{"s", ",", " ", "k"}], "}"}]}], "]"}], ",", " ", 
        RowBox[{"{", 
         RowBox[{"si", ",", " ", "s"}], "}"}], ",", " ", 
        RowBox[{"{", 
         RowBox[{"ki", ",", " ", "0", ",", "0"}], "}"}]}], "]"}], 
      "]"}], ",", 
     RowBox[{"ImageSize", " ", "\[Rule]", " ", "50"}]}], "]"}]}], 
  "]"}]], "Input"]
}, Open  ]]

to the configuration (corresponding to ):

tmdec
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"tmdec", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"i_", ",", "u_"}], "}"}], ",", "n_", ",", 
    RowBox[{"sz_", ":", "Automatic"}]}], "]"}], ":=", 
  RowBox[{"RulePlot", "[", 
   RowBox[{
    RowBox[{"TuringMachine", "[", "2506", "]"}], ",", 
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"1", ",", 
        RowBox[{"i", "+", "1"}]}], "}"}], ",", 
      RowBox[{"IntegerDigits", "[", 
       RowBox[{"u", ",", "2", ",", "n"}], "]"}]}], "}"}], ",", "0", 
    ",", 
    RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
    RowBox[{"Frame", "\[Rule]", "None"}], ",", 
    RowBox[{"ImageSize", "\[Rule]", "sz"}]}], "]"}]}]], "Input"],

    Cell[BoxData[
 RowBox[{"tmdec", "[", 
  RowBox[{
   RowBox[{"{", 
    RowBox[{"0", ",", "0"}], "}"}], ",", "3", ",", "50"}], 
  "]"}]], "Input"]
}, Open  ]]

And now by treating these elements as generators (and effectively applying them not just to the initial configuration, but to any configuration), we get as the Cayley graph of the group exactly the rulial multiway graph above.

It’s worth noting that the 4 elements we’ve used don’t correspond to the minimal set of generators for the group. Two elements suffice. And for example, we can use and , which can be thought of respectively as moving the head right, and flipping the color of one cell (again relative to the “identity” configuration ):

tmdec
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"tmdec", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"i_", ",", "u_"}], "}"}], ",", "n_", ",", 
    RowBox[{"sz_", ":", "Automatic"}]}], "]"}], ":=", 
  RowBox[{"RulePlot", "[", 
   RowBox[{
    RowBox[{"TuringMachine", "[", "2506", "]"}], ",", 
    RowBox[{"{", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"1", ",", 
        RowBox[{"i", "+", "1"}]}], "}"}], ",", 
      RowBox[{"IntegerDigits", "[", 
       RowBox[{"u", ",", "2", ",", "n"}], "]"}]}], "}"}], ",", "0", 
    ",", 
    RowBox[{"Mesh", "\[Rule]", "All"}], ",", 
    RowBox[{"Frame", "\[Rule]", "None"}], ",", 
    RowBox[{"ImageSize", "\[Rule]", "sz"}]}], "]"}]}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{
   RowBox[{"tmdec", "[", 
    RowBox[{"#", ",", "3", ",", "50"}], "]"}], "&"}], "/@", 
  RowBox[{"{", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"1", ",", "0"}], "}"}], ",", 
    RowBox[{"{", 
     RowBox[{"0", ",", "1"}], "}"}]}], "}"}]}]], "Input"]
}, Open  ]]

With these generators, we get the Cayley graph:

With
&#10005

With[{n = 3}, 
 With[{g = 
    CayleyGraph[
     PermutationGroup[{Cycles[{{1, 2}}], 
       Cycles[{Range[1, 2 n - 1, 2], Range[2, 2 n, 2]}]}]]}, 
  Show[#, ImageSize -> 200] & /@ {g, Graph3D[g]}]]

How else can we characterize the group? For any tape size n we can write it in terms of explicit permutations:

PermutationGroup
&#10005

PermutationGroup[{Cycles[{{1, 2}}], 
  Cycles[{Range[1, 2 n - 1, 2], Range[2, 2 n, 2]}]}]

(For , the group can be generated by the permutations .)

We can also represent it symbolically in terms of generators and relations. Calling our “move-right” generator R, and “bit-flip” generator F, the group then satisfies at least the relations:

OK, so does the group have a name? For n = 2, it’s the 8-element dihedral group D4 and for n = 3, it’s the 24-element group A4 × 2. For larger n, there doesn’t seem to be a standard name. But given our derivation we can just call it . And we can express it as a semidirect product (or wreath product):

The normal subgroup (2)n here represents states of the tape, and corresponds to a Boolean n-cube. The cyclic group n represents the position of the head, and acts on the Boolean n-cube by rotating its coordinates.

For any n, we can use just two generators, producing the sequence of Cayley graphs:

Table
&#10005

Table[CayleyGraph[
  PermutationGroup[{Cycles[{{1, 2}}], 
    Cycles[{Range[1, 2 n - 1, 2], Range[2, 2 n, 2]}]}]], {n, 2, 5}]

Undirected versions of these are exactly the cube-connected cycle graphs that have arisen in studying communications networks:

Prepend
&#10005

Prepend[Table[GraphData[{"CubeConnectedCycle", n}], {n, 3, 5}], 
 CloudGet["https://wolfr.am/N9FGlZe8"]]

So now what about the limit n  ? Now, the group is no longer finite, but we’ve still got the relations

and in the end, we can see that the group can be described as a semidirect product:

In a sense, the group—and its Cayley graph—is dominated by the infinite-dimensional Boolean hypercube. But there’s more going on. And perhaps there’s a useful characterization of the limit that can be derived by the methods of modern geometric theory.

For arbitrary s and k, we can potentially generalize to get:

(Thanks to Tali Beynon, Todd Rowland, Ed Pegg, Jose Martin-Garcia and Christopher Wolfram for trying to help me unscramble the fairly elementary group theory used here.)

Causal Graphs for Deterministic Turing Machines

In a deterministic Turing machine, every step involves one updating event—and the causal graph can be drawn by just joining successive locations of the head, and successive points where the head returns to a square where it has been before:

TMCausalPlot
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/TMCausal.\
wl"]];
TMCausalPlot[2506, {{1, 10}, ConstantArray[0, 21]}, 20]

Continuing for a few more steps, the causal graph for this particular Turing machine becomes:

With[{t = 40}
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/TMCausal.\
wl"]];
With[{t = 40}, 
 Graph[Rule @@@ 
   TMCausalData[
    TuringMachine[2506, {{1, t}, ConstantArray[0, 2 t + 1]}, t]], 
  EdgeStyle -> 
   ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", 
    "EdgeStyle"], 
  VertexStyle -> 
   ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", 
    "VertexStyle"]]]

Continuing for more steps, and redrawing the graph, we see that we get a simple grid:

With[{t = 400}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/TMCausal.\
wl"]]; With[{t = 400}, 
 Graph[Rule @@@ 
   TMCausalData[
    TuringMachine[2506, {{1, t}, ConstantArray[0, 2 t + 1]}, t]], 
  EdgeStyle -> 
   ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", 
    "EdgeStyle"], 
  VertexStyle -> 
   ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", 
    "VertexStyle"]]]

Of s = 2, k = 2 Turing machines, the one with the most exotic causal graph is the “binary counter” machine 1953:

TMCausalPlot
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/TMCausal.\
wl"]];
TMCausalPlot[1953, {{1, 10}, ConstantArray[0, 21]}, 20]

With[{t = 1000}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/TMCausal.\
wl"]]; With[{t = 1000}, 
 Graph[Rule @@@ 
   TMCausalData[
    TuringMachine[1953, {{1, t}, ConstantArray[0, 2 t + 1]}, t]], 
  EdgeStyle -> 
   ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", 
    "EdgeStyle"], 
  VertexStyle -> 
   ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", 
    "VertexStyle"]]]

The causal graph gives a good “overall map” of the behavior of a Turing machine. Here are a few Turing machines (with s = 3, k = 2 and s = 4, k = 2) from A New Kind of Science (compare also the s = 2, k = 3 universal Turing machine):

RulePlot
&#10005

RulePlot[TuringMachine[#], {1, {{}, 0}}, 100, 
   ImageSize -> {Automatic, 400}] & /@ {{{1, 0} -> {3, 1, -1}, {1, 
     1} -> {2, 0, 1}, {2, 0} -> {1, 1, 1}, {2, 1} -> {3, 1, 1}, {3, 
     0} -> {2, 1, 1}, {3, 1} -> {1, 0, -1}}, {{1, 0} -> {3, 
     1, -1}, {1, 1} -> {2, 1, -1}, {2, 0} -> {1, 1, -1}, {2, 1} -> {4,
      1, 1}, {3, 0} -> {2, 1, 1}, {3, 1} -> {1, 0, -1}, {4, 0} -> {2, 
     1, -1}, {4, 1} -> {4, 0, 1}}, {{1, 0} -> {4, 0, 1}, {1, 1} -> {3,
      1, -1}, {2, 0} -> {1, 1, -1}, {2, 1} -> {1, 1, 1}, {3, 0} -> {1,
      1, 1}, {3, 1} -> {3, 0, -1}, {4, 0} -> {2, 1, 1}, {4, 1} -> {2, 
     1, 1}}, {{1, 0} -> {2, 1, -1}, {1, 1} -> {1, 0, 1}, {2, 0} -> {4,
      0, -1}, {2, 1} -> {3, 1, 1}, {3, 0} -> {4, 1, -1}, {3, 1} -> {1,
      1, 1}, {4, 0} -> {1, 1, 1}, {4, 1} -> {2, 0, -1}}}

And here are their respective causal graphs:

With[{t = 1000}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/TMCausal.\
wl"]]; With[{t = 1000}, 
   Graph[Rule @@@ 
     TMCausalData[
      TuringMachine[#, {{1, t}, ConstantArray[0, 2 t + 1]}, t]], 
    EdgeStyle -> 
     ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph",
       "EdgeStyle"], 
    VertexStyle -> 
     ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph",
       "VertexStyle"]]] & /@ {{{1, 0} -> {3, 1, -1}, {1, 1} -> {2, 0, 
     1}, {2, 0} -> {1, 1, 1}, {2, 1} -> {3, 1, 1}, {3, 0} -> {2, 1, 
     1}, {3, 1} -> {1, 0, -1}}, {{1, 0} -> {3, 1, -1}, {1, 1} -> {2, 
     1, -1}, {2, 0} -> {1, 1, -1}, {2, 1} -> {4, 1, 1}, {3, 0} -> {2, 
     1, 1}, {3, 1} -> {1, 0, -1}, {4, 0} -> {2, 1, -1}, {4, 1} -> {4, 
     0, 1}}, {{1, 0} -> {4, 0, 1}, {1, 1} -> {3, 1, -1}, {2, 0} -> {1,
      1, -1}, {2, 1} -> {1, 1, 1}, {3, 0} -> {1, 1, 1}, {3, 1} -> {3, 
     0, -1}, {4, 0} -> {2, 1, 1}, {4, 1} -> {2, 1, 1}}, {{1, 0} -> {2,
      1, -1}, {1, 1} -> {1, 0, 1}, {2, 0} -> {4, 0, -1}, {2, 1} -> {3,
      1, 1}, {3, 0} -> {4, 1, -1}, {3, 1} -> {1, 1, 1}, {4, 0} -> {1, 
     1, 1}, {4, 1} -> {2, 0, -1}}}

Rulial Multiway Causal Graphs

What can we say about the causal graph associated with a rulial multiway system? The first important observation is that rulial multiway graphs always exhibit causal invariance, since by including transitions associated with all possible rules one is inevitably including both rules and their inverses, with the result that every branching of edges in the rulial multiway graph is always associated with a corresponding merging.

It’s fairly easy to see this for two steps of s = 2, k = 2 Turing machines. The rulial multiway states graph here is:

LayeredGraphPlot
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; LayeredGraphPlot[
 With[{t = 2}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure"]], 
 AspectRatio -> 1/2]

This can also be rendered:

With[{t = 2}
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]];
With[{t = 2}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "StatesGraphStructure"]]

Explicitly showing events we get:

With[{t = 2}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 2}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "EvolutionEventsGraphStructure"]]

Including causal connections we get

With[{t = 2}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 2}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "EvolutionCausalGraphStructure"]]

or after 3 steps:

With[{t = 3}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 3}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "EvolutionCausalGraphStructure"]]

The pure rulial multiway causal graph in this case is then:

With[{t = 3}
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]];
With[{t = 3}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "CausalGraphStructure"]]

In layered form this becomes:

With[{t = 3}
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]];
With[{t = 3}, 
 LayeredGraphPlot[
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "CausalGraphStructure"], 
  AspectRatio -> 1/2]]

After 5 steps the growth in the number of nodes reached going from the root grows like:

ListLogPlot
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"data", "=", 
   RowBox[{"\[LeftAssociation]", 
    RowBox[{
     RowBox[{
      RowBox[{"{", "1", "}"}], "\[Rule]", "1184"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"1", ",", "9"}], "}"}], "\[Rule]", "400"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "344", ",", "656", ",", "1208",
         ",", "1728", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "344", ",", "592", ",", "1112",
         ",", "1688", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "288", ",", "576", ",", "1208",
         ",", "1728", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "288", ",", "512", ",", "1112",
         ",", "1688", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "344", ",", "656", 
        ",", "1208", ",", "1728", ",", "1984"}], "}"}], "\[Rule]", 
      "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "344", ",", "592", 
        ",", "1112", ",", "1688", ",", "1984"}], "}"}], "\[Rule]", 
      "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "288", ",", "576", 
        ",", "1208", ",", "1728", ",", "1984"}], "}"}], "\[Rule]", 
      "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "288", ",", "512", 
        ",", "1112", ",", "1688", ",", "1984"}], "}"}], "\[Rule]", 
      "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "136", ",", "560", ",", "1208", ",", 
        "1728", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "136", ",", "496", ",", "1112", ",", 
        "1688", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "464", ",", "1208", ",", "1728",
         ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "400", ",", "1112", ",", "1688",
         ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"1", ",", "33", ",", "73"}], "}"}], "\[Rule]", "32"}], 
     ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{"1", ",", "25", ",", "73"}], "}"}], "\[Rule]", "32"}], 
     ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "184", ",", "800", ",", "1552", ",", 
        "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "352", ",", "816", ",", "1528",
         ",", "1848", ",", "1984"}], "}"}], "\[Rule]", "16"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "712", ",", "1568", ",", 
        "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "392", ",", "960", ",", "1680",
         ",", "1968", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "456", ",", "1032", ",", 
        "1672", ",", "1928", ",", "1984"}], "}"}], "\[Rule]", "8"}], 
     ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "656", ",", "1496", ",", 
        "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "69", ",", "285", ",", "720", ",", "1336", ",", 
        "1816", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "69", ",", "285", ",", "696", ",", "1296", ",", 
        "1816", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "45", ",", "253", ",", "696", ",", "1304", ",", 
        "1816", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "45", ",", "253", ",", "672", ",", "1264", ",", 
        "1816", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "105", ",", "344", ",", "656", ",", "1208",
         ",", "1728", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "105", ",", "344", ",", "592", ",", "1112",
         ",", "1688", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "185", ",", "800", ",", "1552", ",", 
        "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "105", ",", "712", ",", "1568", ",", 
        "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "105", ",", "656", ",", "1496", ",", 
        "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "352", ",", "816", 
        ",", "1528", ",", "1848", ",", "1984"}], "}"}], "\[Rule]", 
      "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "136", ",", "640", ",", "1352", ",", 
        "1784", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "480", ",", "1272", ",", "1776",
         ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "136", ",", "560", ",", "1264", ",", 
        "1800", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "400", ",", "1176", ",", "1752",
         ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "392", ",", "960", 
        ",", "1680", ",", "1968", ",", "1984"}], "}"}], "\[Rule]", 
      "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "456", ",", "1032", 
        ",", "1672", ",", "1928", ",", "1984"}], "}"}], "\[Rule]", 
      "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "117", ",", "588", ",", "1376", ",", "1864", ",", 
        "1984"}], "}"}], "\[Rule]", "2"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "33", ",", "136", ",", "312", ",", "728", ",", 
        "1360", ",", "1792", ",", "1984"}], "}"}], "\[Rule]", "4"}], 
     ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "69", ",", "540", ",", "1384", ",", "1864", ",", 
        "1984"}], "}"}], "\[Rule]", "2"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "25", ",", "200", ",", "616", ",", "1272", ",", 
        "1808", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "33", ",", "376", ",", "1048", ",", "1656", ",", 
        "1928", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "33", ",", "136", ",", "312", ",", "648", ",", 
        "1272", ",", "1808", ",", "1984"}], "}"}], "\[Rule]", "4"}], 
     ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "25", ",", "344", ",", "1080", ",", "1712", ",", 
        "1928", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "25", ",", "200", ",", "696", ",", "1360", ",", 
        "1792", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "33", ",", "248", ",", "896", ",", "1624", ",", 
        "1968", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "25", ",", "136", ",", "432", ",", "1016", ",", 
        "1656", ",", "1928", ",", "1984"}], "}"}], "\[Rule]", "4"}], 
     ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "33", ",", "312", ",", "976", ",", "1656", ",", 
        "1928", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "25", ",", "136", ",", "368", ",", "936", ",", 
        "1624", ",", "1968", ",", "1984"}], "}"}], "\[Rule]", "4"}], 
     ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "352", ",", "760", ",", "1352",
         ",", "1784", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "288", ",", "600", ",", "1272",
         ",", "1776", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "352", ",", "680", ",", "1264",
         ",", "1800", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "104", ",", "288", ",", "520", ",", "1176",
         ",", "1752", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "69", ",", "349", ",", "856", ",", "1448", ",", 
        "1848", ",", "1984"}], "}"}], "\[Rule]", "8"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "45", ",", "253", ",", "744", ",", "1360", ",", 
        "1792", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "105", ",", "352", ",", "760", ",", "1352",
         ",", "1784", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "45", ",", "253", ",", "664", ",", "1272", ",", 
        "1808", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "105", ",", "352", ",", "680", ",", "1264",
         ",", "1800", ",", "1984"}], "}"}], "\[Rule]", "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "352", ",", "760", 
        ",", "1352", ",", "1784", ",", "1984"}], "}"}], "\[Rule]", 
      "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "288", ",", "600", 
        ",", "1272", ",", "1776", ",", "1984"}], "}"}], "\[Rule]", 
      "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "352", ",", "680", 
        ",", "1264", ",", "1800", ",", "1984"}], "}"}], "\[Rule]", 
      "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "9", ",", "72", ",", "160", ",", "288", ",", "520", 
        ",", "1176", ",", "1752", ",", "1984"}], "}"}], "\[Rule]", 
      "4"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "33", ",", "312", ",", "968", ",", "1624", ",", 
        "1968", ",", "1984"}], "}"}], "\[Rule]", "2"}], ",", 
     RowBox[{
      RowBox[{"{", 
       RowBox[{
       "1", ",", "25", ",", "264", ",", "992", ",", "1696", ",", 
        "1968", ",", "1984"}], "}"}], "\[Rule]", "2"}]}], 
    "\[RightAssociation]"}]}], ";"}]], "Input"],

Cell[BoxData[
 RowBox[{"ListLogPlot", "[", 
  RowBox[{
   RowBox[{"Select", "[", 
    RowBox[{
     RowBox[{"Keys", "[", "data", "]"}], ",", 
     RowBox[{
      RowBox[{
       RowBox[{"Length", "[", "#", "]"}], "\[Equal]", "9"}], "&"}]}], 
    "]"}], ",", 
   RowBox[{"Joined", "\[Rule]", "True"}], ",", 
   RowBox[{"Frame", "\[Rule]", "True"}], ",", 
   RowBox[{"PlotStyle", "\[Rule]", 
    RowBox[{
     RowBox[{
     "ResourceFunction", "[", 
      "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
     RowBox[{"\"\<GenericLinePlot\>\"", ",", "\"\<PlotStyles\>\""}], 
     "]"}]}]}], "]"}]], "Input"]
}, Open  ]]

Causal invariance implies that this multiway causal graph is ultimately composed of a large number of interwoven copies of a single causal graph. After any given number of steps of evolution, the various copies of this causal graph will have “reached different stages”. Here are the results after 3 steps:

Counts
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Counts[
 IndexGraph[#, ImageSize -> Tiny] & /@ 
  With[{t = 3}, 
   ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
    "CausalGraphStructureInstances"]]]

And after 4 steps:

Counts
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Counts[
 IndexGraph[#, ImageSize -> Tiny] & /@ 
  With[{t = 4}, 
   ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
    "CausalGraphStructureInstances"]]]

One can also look at rulial multiway causal graphs for other sets of Turing machines. For s = 1, k = 1 one has (here after 5 steps)

LayeredGraphPlot
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; LayeredGraphPlot[
 SimpleGraph[
  With[{t = 5}, 
   ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{1, 1}], {{1, t + 1, 0}, 
     ConstantArray[0, 2 t + 1]}, t, "CausalGraphStructure"]]]]

which is equivalent to:

With[{t = 5}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 5}, 
 SimpleGraph[
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{1, 1}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
   "CausalGraphStructure"]]]

The individual causal graphs in this case are immediately all the same, and are just:

Counts
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Counts[
 IndexGraph[#, ImageSize -> Tiny] & /@ 
  With[{t = 5}, 
   ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{1, 1}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
    "CausalGraphStructureInstances"]]]

For s = 2, k = 1 one already has after 3 steps

With[{t = 3}
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]];
With[{t = 3}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "CausalGraphStructure"]]

or in layered form:

LayeredGraphPlot
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; LayeredGraphPlot[
 With[{t = 3}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "CausalGraphStructure"]], 
 AspectRatio -> 1/3]

After 5 steps this becomes

With[{t = 5}
&#10005

CloudGet[CloudObject[
   "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]];
With[{t = 5}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "CausalGraphStructure"]]

or in layered form:

LayeredGraphPlot
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; LayeredGraphPlot[
 With[{t = 5}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "CausalGraphStructure"]], 
 AspectRatio -> 1/3]

In this case, the individual causal graphs after 5 steps are:

Counts
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Counts[
 IndexGraph[#, ImageSize -> Tiny] & /@ 
  With[{t = 5}, 
   ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
    "CausalGraphStructureInstances"]]]

For s = 1, k = 2 one has very similar results to the case s = 2, k = 2. After 3 steps the causal graph is:

With[{t = 3}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 3}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "CausalGraphStructure"]]

Or after 5 steps:

With[{t = 4}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 4}, 
 ResourceFunction["MultiwayTuringMachine"][
  AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
   t, "CausalGraphStructure"]]

Removing multiple edges this is:

SimpleGraph
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; SimpleGraph[
 With[{t = 4}, 
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "CausalGraphStructure"]]]

The individual causal graphs in this case are:

Counts
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Counts[
 IndexGraph[#, ImageSize -> Tiny] & /@ 
  With[{t = 5}, 
   ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
    "CausalGraphStructureInstances"]]]

Rulial Graphs

Just as for ordinary multiway graphs one can study branchial graphs which represent their transversals, so similarly for rulial multiway graphs one can study rulial graphs which represent their transversals. The layered way we have drawn multiway graphs corresponds to a particular choice of foliation—and with this choice, we can immediately generate rulial graphs.

For s = 2, k = 1 one has after 2 steps

With[{t = 2}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 2}, 
 Graph[ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "BranchialGraph", 
   PerformanceGoal -> "Quality", VertexSize -> .45 {1.15, .3}], 
  EdgeStyle -> 
   ResourceFunction["WolframPhysicsProjectStyleData"]["RulialGraph", 
    "EdgeStyle"]]]

while after 3 steps one gets:

With[{t = 3}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Framed[
 With[{t = 3}, 
  Graph[ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{2, 1}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
    "BranchialGraph"], PerformanceGoal -> "Quality", 
   VertexSize -> .8 {1, 1/(2 t + 1)}, 
   EdgeStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["RulialGraph", 
     "EdgeStyle"]]], FrameStyle -> LightGray]

For s = 1, k = 2 one gets after 2 steps:

With[{t = 2}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Framed[
 With[{t = 2}, 
  Graph[ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
    "BranchialGraph"], PerformanceGoal -> "Quality", 
   VertexSize -> .45 {1.15, .3}, 
   EdgeStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["RulialGraph", 
     "EdgeStyle"]]], FrameStyle -> LightGray]

while after 3 steps one has:

With[{t = 3}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Framed[
 With[{t = 3}, 
  Graph[ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
    "BranchialGraph"], PerformanceGoal -> "Quality", 
   VertexSize -> .5 {1.15, .3}, 
   EdgeStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["RulialGraph", 
     "EdgeStyle"]]], FrameStyle -> LightGray]

The sequence of results for steps 1 through 4 is:

Table
&#10005

Table[Framed[
  Graph[ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{1, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
    "BranchialGraphStructure"], 
   EdgeStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["RulialGraph", 
     "EdgeStyle"]], FrameStyle -> LightGray], {t, 1, 4}]

For s = 2, k = 2 the corresponding results are:

Table
&#10005

Table[Framed[
  Graph[ResourceFunction["MultiwayTuringMachine"][
    AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, Table[0, 2 t + 1]}, t, 
    "BranchialGraphStructure"], 
   EdgeStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["RulialGraph", 
     "EdgeStyle"]], FrameStyle -> LightGray], {t, 1, 4}]

What do these pictures mean? Just as branchial graphs in ordinary multiway systems can be thought of as “entanglement maps” for states (interpreted in our models as quantum states) in ordinary “multiway space”, so here these rulial graphs can be thought of as “entanglement maps” for states in rulial space. In other words, they are a kind of map of which Turing machine configurations are “evolutionarily close” to which other ones, in the sense that they can be reached with only a few different choices of rules.

Deterministic Turing Machine Paths in Rulial Space

The rulial multiway graph defines all paths that can be followed by all non-deterministic Turing machines. At each node in this graph there is therefore an outgoing edge corresponding to any possible Turing machine transition from the configuration corresponding to that node. But what if one considers just a single deterministic Turing machine? Its evolution is then a single path within the rulial multiway graph.

Consider for example the s = 2, k = 2 Turing machine:

RulePlot
&#10005

RulePlot[TuringMachine[2506]]

This machine evolves from a blank tape according to:

RulePlot
&#10005

RulePlot[TuringMachine[2506], {1, {{}, 0}}, 10, Mesh -> True, 
 Frame -> None]

This corresponds to a path in the rulial multiway graph:

With[{t = 4}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 4}, 
 HighlightGraph[
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure", 
   VertexSize -> 1], 
  Style[PathGraph[
    Rule @@@ 
     Partition[
      ToString /@ 
       TuringMachine[
        2506, {{2, t + 1, 0}, 
         ReplacePart[ConstantArray[0, 2 t + 1], t + 1 -> 1]}, t], 2, 
      1]], Thickness[0.01], Red]]]

With a different initial condition

RulePlot
&#10005

RulePlot[TuringMachine[2506], {1, {{1}, 0}}, 10, Mesh -> True, 
 Frame -> None]

the path can be very different:

With[{t = 4}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 4}, 
 HighlightGraph[
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure", 
   VertexSize -> 1], 
  Style[PathGraph[
    Rule @@@ 
     Partition[
      ToString /@ 
       TuringMachine[
        2506, {{1, t + 1, 0}, 
         ReplacePart[ConstantArray[0, 2 t + 1], t + 1 -> 1]}, t], 2, 
      1]], Thickness[0.01], Red]]]

This pictures might make it seem that the paths corresponding to the evolution of deterministic Turing machines are geodesics in the rulial multiway graph. But in general they are definitely not. For example, starting from a blank tape, the rule

RulePlot
&#10005

RulePlot[TuringMachine[{{1, 0} -> {2, 0, -1}, {1, 1} -> {1, 
     0, -1}, {2, 0} -> {1, 1, 1}, {2, 1} -> {1, 0, -1}}]]

follows this path on the rulial multiway graph:

With[{t = 4}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 4}, 
 HighlightGraph[
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure", 
   VertexSize -> 1], 
  Style[PathGraph[
    Rule @@@ 
     Partition[
      ToString /@ 
       TuringMachine[{{1, 0} -> {2, 0, -1}, {1, 1} -> {1, 0, -1}, {2, 
           0} -> {1, 1, 1}, {2, 1} -> {1, 0, -1}}, {{1, t + 1, 0}, 
         ConstantArray[0, 2 t + 1]}, t], 2, 1]], Thickness[0.01], 
   Red]]]

If one allows any possible Turing machine transition at every step, then one can follow a geodesic path from a node corresponding to an initial condition to a node corresponding to any other configuration. But if one restricts oneself to the transitions in a particular (deterministic) Turing machine, then there will in general be many configurations one will never reach, and even those that one can reach, one may reach by a circuitous route in the rulial multiway graph.

Given a particular configuration (corresponding to a node in the rulial multiway graph), there may be many deterministic Turing machines that can reach it from a given initial state. One can consider each of these Turing machines to be implementing a certain algorithm. So then the “optimal algorithm” will be the one which is shortest among deterministic Turing machine paths. As I just mentioned, this won’t typically be the shortest possible path: that will usually be achieved by a non-deterministic Turing machine with a particular sequence of transitions. But there is still an optimal case (i.e. an “optimal algorithm”) among deterministic Turing machines.

But now we can ask across all possible deterministic Turing machines where they can reach in the rulial multiway graph. Here is the result for 4 steps for the s = 2, k = 2 Turing machines we have been considering:

With[{t = 4}
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; With[{t = 4}, 
 With[{g = 
    ResourceFunction["MultiwayTuringMachine"][
     AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, 
      ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure", 
     VertexSize -> 1]}, 
  HighlightGraph[g, 
   Style[PathGraph[
       Rule @@@ 
        Partition[
         ToString /@ 
          TuringMachine[#, {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
            t], 2, 1]], Thick, Red] & /@ Range[0, 4095]]]]

These are the results for 1, 2 and 3 steps:

ParallelTable
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; ParallelTable[
 With[{t = 4}, 
  With[{g = 
     ResourceFunction["MultiwayTuringMachine"][
      AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, 
       ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure", 
      EdgeStyle -> 
       Directive[
        ResourceFunction["WolframPhysicsProjectStyleData"][
          "StatesGraph"]["EdgeStyle"], Opacity[0.4]], 
      VertexSize -> 1]}, 
   HighlightGraph[g, 
    Style[PathGraph[
        Rule @@@ 
         Partition[
          ToString /@ 
           TuringMachine[#, {{1, t + 1, 0}, 
             ConstantArray[0, 2 t + 1]}, tt], 2, 1]], Thick, 
       Append[Red, 1]] & /@ Range[0, 4095]]]], {tt, 3}]

What is the significance of this? Essentially what we’re seeing is a comparison of what can be achieved with deterministic computation versus non-deterministic. Taking the 4-step case as an example, the “background” gray rulial multiway graph shows what can be achieved with arbitrary non-deterministic computation in 4 steps. The red region is what deterministic computation can achieve in the same number of steps.

In a sense this is a very simple empirical analog of the P vs. NP problem. Unlike the real P vs. NP case, we’re not allowing arbitrary polynomial-time algorithms here; we’re just looking at possible s = 2, k = 2 Turing machine algorithms running specifically for 4 steps. But if we were to generalize this appropriately, P = NP would imply that the “red region” must in some limit in effect “reach anywhere in the graph”.

A little more precisely, the official definition of P and NP is for decision problems: you start from some initial condition which defines an instance of a problem (“Is this Boolean formula satisfiable?” or whatever), and the system must eventually evolve to a state representing either “yes” or “no”. We can imagine setting things up so that the outcomes correspond to particular configurations of the Turing machine. The inputs are then also encoded as initial configurations of the Turing machine, and we want to know what happens as we consider inputs of progressively larger sizes. We can imagine drawing the rulial multiway graph so that progressively larger inputs are shown “progressively further from the center”. If we consider non-deterministic Turing machines (associated with the class of NP computations), then the shortest computation will be a geodesic path in the rulial multiway graph from the input configuration to the outcome configuration. But for deterministic Turing machines (associated with the class P) it will in general be some much more circuitous path.

The standard P vs. NP problem asks about limiting behavior as one increases the size of the input computation—and one might imagine that the question could be “geometrized” in terms of some continuum limit of the rulial multiway graph. Of course, there is no guarantee that any reasonable limit exists. And it could perfectly well be that the question of whether P  NP is actually undecidable, or in other words, that no finite proof of it can be given within a standard axiom system (such as Peano arithmetic or ZFC set theory).

One could imagine empirically testing more and more Turing machines, and seeing how they perform on an NP-complete problem. One might think of plotting their running times as a function of n for increasingly large n. For a while a particular Turing machine might be the winner. But then another one might take over. And there might be no end to how many “surprises” would occur as one increases n. (Somehow this is reminiscent of the story of the Skewes number and whether LogIntegral[n] > Prime[n].)

In computational complexity theory one usually thinks about explicitly constructing optimal algorithms by standard “engineering-like” methods. But I think there’s a lot to be learned from a more empirical approach—in which one doesn’t try to construct optimal algorithms, but just finds them “in the wild” by searching all possible programs. In the past, it might not have seemed that “just searching for programs” would ever produce anything terribly interesting. But one of the big consequences of what I discussed in A New Kind of Science is that even among tiny programs—small enough that one can, for example, enumerate all of them—there’s often very complex and potentially “useful” behavior. And that makes it seem much more reasonable to try to do “empirical computational complexity theory”—enumerating possible programs to find optimal ones, and so on.

Small programs can be thought of as ones with low algorithmic complexity. So searching for “fast programs” among these can be thought of as searching for programs with low time complexity, and low algorithmic complexity. We don’t know exactly how strong the constraint of low algorithmic complexity is, but from what I’ve seen in the computational universe (and what’s embodied in things like the Principle of Computational Equivalence), it seems as if it’s not such a big constraint.

I studied “empirical computational complexity theory” a bit in A New Kind of Science, notably for Turing machines. And one of the interesting observations was that the optimal algorithm for things was often not something that could readily be constructed in a step-by-step engineering way. Instead, it was something that one basically could only find pretty much by doing a search of possible programs—and where there usually didn’t seem to be a “general form” that would “apply for all n”, and let one readily deduce the properties of the n   limit. In other words, it didn’t seem like what we’d now think of as the sequence of paths in rulial space would show any sign of converging to a “continuum limit”.

A decent example of all this occurs in sorting networks. Imagine that you are given a collection of n numbers to sort. You can straightforwardly do this by making about n2 pairwise comparisons, and it’s pretty easy to optimize this a bit.

But explicit searches have revealed that the actual optimal networks for successive n are:

Table
&#10005

Cell[CellGroupData[{
Cell[BoxData[{
 RowBox[{
  RowBox[{"CloudGet", "[", 
   RowBox[{
   "CloudObject", "[", 
    "\"\<https://www.wolframcloud.com/obj/wolframphysics/Bulletin/\
SortingNetworks.wl\>\"", "]"}], "]"}], ";"}], "\[IndentingNewLine]", 
 RowBox[{
  RowBox[{"NetworkGraphics", "[", 
   RowBox[{"net_", ",", "seq_", ",", "opts___"}], "]"}], ":=", 
  RowBox[{"Module", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{
      RowBox[{"n", "=", 
       RowBox[{"Max", "[", "net", "]"}]}], ",", 
      RowBox[{"net1", "=", 
       RowBox[{"Flatten", "[", 
        RowBox[{"net", ",", "1"}], "]"}]}], ",", "len"}], "}"}], ",", 
    "\[IndentingNewLine]", 
    RowBox[{
     RowBox[{"len", "=", 
      RowBox[{"Length", "[", "net1", "]"}]}], ";", 
     "\[IndentingNewLine]", 
     RowBox[{"Graphics", "[", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{
         RowBox[{"GrayLevel", "[", "0.8", "]"}], ",", 
         RowBox[{"Map", "[", 
          RowBox[{"Reverse", ",", 
           RowBox[{"If", "[", 
            RowBox[{
             RowBox[{"seq", "===", "None"}], ",", 
             RowBox[{"Table", "[", 
              RowBox[{
               RowBox[{"Line", "[", 
                RowBox[{"{", 
                 RowBox[{
                  RowBox[{"{", 
                   RowBox[{"0", ",", "y"}], "}"}], ",", 
                  RowBox[{"{", 
                   RowBox[{
                    RowBox[{"len", "+", "1"}], ",", "y"}], "}"}]}], 
                 "}"}], "]"}], ",", 
               RowBox[{"{", 
                RowBox[{"y", ",", "n"}], "}"}]}], "]"}], ",", 
             RowBox[{"MapIndexed", "[", 
              RowBox[{
               RowBox[{
                RowBox[{"{", 
                 RowBox[{
                  RowBox[{"Thickness", "[", 
                   RowBox[{"0.1", "/", 
                    RowBox[{"Length", "[", 
                    RowBox[{"First", "[", "seq", "]"}], "]"}]}], 
                   "]"}], ",", 
                  RowBox[{
                   RowBox[{"ColorData", "[", "\"\<Rainbow\>\"", "]"}],
                    "[", 
                   RowBox[{
                    RowBox[{"#", "[", 
                    RowBox[{"[", "1", "]"}], "]"}], "/", "n"}], "]"}],
                   ",", 
                  RowBox[{"Line", "[", 
                   RowBox[{"{", 
                    RowBox[{
                    RowBox[{"{", 
                    RowBox[{
                    RowBox[{"#", "[", 
                    RowBox[{"[", 
                    RowBox[{"2", ",", "1"}], "]"}], "]"}], ",", 
                    RowBox[{"#2", "[", 
                    RowBox[{"[", "1", "]"}], "]"}]}], "}"}], ",", 
                    RowBox[{"{", 
                    RowBox[{
                    RowBox[{"#", "[", 
                    RowBox[{"[", 
                    RowBox[{"2", ",", "2"}], "]"}], "]"}], ",", 
                    RowBox[{"#2", "[", 
                    RowBox[{"[", "1", "]"}], "]"}]}], "}"}]}], "}"}], 
                   "]"}]}], "}"}], "&"}], ",", 
               RowBox[{"Map", "[", 
                RowBox[{
                 RowBox[{"Function", "[", 
                  RowBox[{"x", ",", 
                   RowBox[{"With", "[", 
                    RowBox[{
                    RowBox[{"{", 
                    RowBox[{"lengths", "=", 
                    RowBox[{"Length", "/@", 
                    RowBox[{"Split", "[", "x", "]"}]}]}], "}"}], ",", 
                    
                    RowBox[{
                    RowBox[{
                    RowBox[{"{", 
                    RowBox[{
                    RowBox[{"#", "[", 
                    RowBox[{"[", "1", "]"}], "]"}], ",", 
                    RowBox[{"{", 
                    RowBox[{
                    RowBox[{
                    RowBox[{"#", "[", 
                    RowBox[{"[", "3", "]"}], "]"}], "-", 
                    RowBox[{"#", "[", 
                    RowBox[{"[", "2", "]"}], "]"}]}], ",", 
                    RowBox[{"#", "[", 
                    RowBox[{"[", "3", "]"}], "]"}]}], "}"}]}], "}"}], 
                    "&"}], "/@", 
                    RowBox[{"Thread", "[", 
                    RowBox[{"{", 
                    RowBox[{
                    RowBox[{"Map", "[", 
                    RowBox[{"First", ",", 
                    RowBox[{"Split", "[", "x", "]"}]}], "]"}], ",", 
                    "lengths", ",", 
                    RowBox[{"Accumulate", "[", "lengths", "]"}]}], 
                    "}"}], "]"}]}]}], "]"}]}], "]"}], ",", 
                 RowBox[{"Transpose", "[", "seq", "]"}]}], "]"}], ",", 
               RowBox[{"{", 
                RowBox[{"-", "3"}], "}"}]}], "]"}]}], "]"}]}], "]"}], 
         ",", 
         RowBox[{"{", 
          RowBox[{"Black", ",", 
           RowBox[{"If", "[", 
            RowBox[{
             RowBox[{"seq", "=!=", "None"}], ",", 
             RowBox[{"Thickness", "[", 
              RowBox[{"0.1", "/", 
               RowBox[{"Length", "[", 
                RowBox[{"First", "[", "seq", "]"}], "]"}]}], "]"}], 
             ",", 
             RowBox[{"{", "}"}]}], "]"}], ",", 
           RowBox[{"MapIndexed", "[", 
            RowBox[{
             RowBox[{
              RowBox[{"Line", "[", 
               RowBox[{"{", 
                RowBox[{
                 RowBox[{"{", 
                  RowBox[{
                   RowBox[{"#2", "[", 
                    RowBox[{"[", "1", "]"}], "]"}], ",", 
                   RowBox[{"#1", "[", 
                    RowBox[{"[", "1", "]"}], "]"}]}], "}"}], ",", 
                 RowBox[{"{", 
                  RowBox[{
                   RowBox[{"#2", "[", 
                    RowBox[{"[", "1", "]"}], "]"}], ",", 
                   RowBox[{"#1", "[", 
                    RowBox[{"[", "2", "]"}], "]"}]}], "}"}]}], "}"}], 
               "]"}], "&"}], ",", "net1", ",", 
             RowBox[{"{", 
              RowBox[{"-", "2"}], "}"}]}], "]"}]}], "}"}]}], "}"}], 
       ",", "opts", ",", 
       RowBox[{"PlotRange", "\[Rule]", "All"}], ",", 
       RowBox[{"ImageSize", "\[Rule]", "450"}], ",", 
       RowBox[{"AspectRatio", "\[Rule]", 
        RowBox[{"1", "/", "2"}]}]}], "]"}]}]}], "]"}]}]}], "Input"],

Cell[BoxData[
 RowBox[{"Table", "[", 
  RowBox[{
   RowBox[{"Show", "[", 
    RowBox[{
     RowBox[{"NetworkGraphics", "[", 
      RowBox[{
       RowBox[{"OptimalSort", "[", "n", "]"}], ",", "None"}], "]"}], 
     ",", 
     RowBox[{"ImageSize", "\[Rule]", 
      RowBox[{"{", 
       RowBox[{"Automatic", ",", "70"}], "}"}]}]}], "]"}], ",", 
   RowBox[{"{", 
    RowBox[{"n", ",", "4", ",", "16"}], "}"}]}], "]"}]], "Input"]
}, Open  ]]

What’s notable is how complicated and “random” they look; there doesn’t seem to be any obvious pattern to them (and my guess is that there fundamentally isn’t). Here’s a plot of the sizes of these networks (divided by n2):

ListLinePlot
&#10005

ListLinePlot[{1, 3, 5, 9, 12, 16, 19, 25, 29, 35, 39, 45, 51, 56, 60}/
  Range[2, 16]^2, AspectRatio -> 1/3, DataRange -> {2, 16}, 
 Filling -> Axis, Frame -> True, Mesh -> All, MeshStyle -> Tiny, 
 PlotRange -> {{1.5, 16.5}, Automatic}, 
 PlotStyle -> 
  ResourceFunction["WolframPhysicsProjectStyleData"][
   "GenericLinePlot", "PlotStyles"]]

It’s worth noting that these are deterministic networks. One could also imagine non-deterministic networks (and indeed one could construct a rulial multiway graph by considering all possible successive placements of pairwise comparisons)—and in a non-deterministic network it’s always possible to sort n numbers in at most n – 1 steps.

The Space of Deterministic Turing Machine Computations

We’ve just seen how the results of deterministic Turing machine computations lay out in the rulial multiway space of all possible non-deterministic Turing machine computations. But what happens if we just look at the graph of deterministic Turing machine computations on their own?

Here are the full rulial multiway graphs for 2 and 3 steps with the graphs of deterministic Turing machine computations superimposed, as before:

Table
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; Table[
 With[{g = 
    ResourceFunction["MultiwayTuringMachine"][
     AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, 
      ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure"]}, 
  HighlightGraph[g, 
   Style[PathGraph[
       Rule @@@ 
        Partition[
         ToString /@ 
          TuringMachine[#, {{1, t + 1, 0}, Table[0, 2 t + 1]}, t], 2, 
         1]], Thick, Red] & /@ Range[0, 4095]]], {t, 2, 3}]

But now let’s “pull out just the red subgraphs”—in other words, include as nodes only those configurations that at least one of the 4096 s = 2, k = 2 Turing machines can reach after 2 or 3 steps:

Table
&#10005

Table[SimpleGraph[
  Flatten@Table[
    DirectedEdge @@@ 
     Partition[
      TuringMachine[tm, {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]}, 
       t], 2, 1], {tm, 0, 4095}], ImageSize -> 300, 
  EdgeStyle -> RGBColor[0.92, 0.17, 0.24]], {t, 2, 3}]

Notice that after 2 steps, deterministic Turing machines can still reach all 36 configurations that non-deterministic ones can reach (though not through quite as many paths). But after 3 steps, among all the deterministic Turing machines, they can only reach 68 possible configurations, while non-deterministic ones can reach 100 configurations.

For all possible non-deterministic Turing machines with s = 2, k = 2 the total number of configurations that can be reached eventually roughly doubles on successive steps:

VertexCount
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; ParallelTable[
 VertexCount[
  ResourceFunction["MultiwayTuringMachine"][
   AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, 
    ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure"]], {t, 0, 
  10}]

For deterministic Turing machines, however, the number of possible configurations that can be reached soon increases much more slowly:

ParallelTable
&#10005

ParallelTable[
 If[t == 0, 1, 
  VertexCount[
   Graph[Flatten@
     Table[DirectedEdge @@@ 
       Partition[
        TuringMachine[tm, {{1, t + 1, 0}, Table[0, 2 t + 1]}, t], 2, 
        1], {tm, 0, 4095}]]]], {t, 0, 15}]

And in fact there’s an obvious bound here: at any given step, the most that can happen is that each of the 4096 s = 2, k = 2 Turing machines leads to a new configuration—or, in other words, the maximum number of configurations reached increases by 4096.

Looking at the differences on successive steps, we find:

data = Block
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"data", "=", 
   RowBox[{"Block", "[", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{
       RowBox[{"t", "=", "200"}], ",", "rr"}], "}"}], ",", 
     "\[IndentingNewLine]", 
     RowBox[{
      RowBox[{"rr", "=", 
       RowBox[{"Table", "[", 
        RowBox[{
         RowBox[{"Rule", "@@@", 
          RowBox[{"Partition", "[", 
           RowBox[{
            RowBox[{"TuringMachine", "[", 
             RowBox[{"tm", ",", 
              RowBox[{"{", 
               RowBox[{
                RowBox[{"{", 
                 RowBox[{"1", ",", 
                  RowBox[{"t", "+", "1"}], ",", "0"}], "}"}], ",", 
                RowBox[{"ConstantArray", "[", 
                 RowBox[{"0", ",", 
                  RowBox[{
                   RowBox[{"2", "t"}], "+", "1"}]}], "]"}]}], "}"}], 
              ",", "t"}], "]"}], ",", "2", ",", "1"}], "]"}]}], ",", 
         RowBox[{"{", 
          RowBox[{"tm", ",", "0", ",", "4095"}], "}"}]}], "]"}]}], 
      ";", "\[IndentingNewLine]", 
      RowBox[{"Table", "[", 
       RowBox[{
        RowBox[{"VertexCount", "[", 
         RowBox[{"Flatten", "[", 
          RowBox[{"Take", "[", 
           RowBox[{"rr", ",", "All", ",", "u"}], "]"}], "]"}], "]"}], 
        ",", 
        RowBox[{"{", 
         RowBox[{"u", ",", "t"}], "}"}]}], "]"}]}]}], "]"}]}], 
  ";"}]], "Input"],

Cell[BoxData[{
 RowBox[{
  RowBox[{"data", "=", 
   RowBox[{"{", 
    RowBox[{
    "9", ",", "36", ",", "68", ",", "94", ",", "144", ",", "248", ",",
      "322", ",", "382", ",", "458", ",", "559", ",", "659", ",", 
     "737", ",", "823", ",", "921", ",", "1007", ",", "1091", ",", 
     "1189", ",", "1303", ",", "1399", ",", "1483", ",", "1575", ",", 
     "1689", ",", "1793", ",", "1870", ",", "1950", ",", "2050", ",", 
     "2146", ",", "2234", ",", "2340", ",", "2456", ",", "2550", ",", 
     "2638", ",", "2730", ",", "2840", ",", "2948", ",", "3036", ",", 
     "3128", ",", "3238", ",", "3332", ",", "3417", ",", "3515", ",", 
     "3629", ",", "3727", ",", "3807", ",", "3901", ",", "4017", ",", 
     "4123", ",", "4205", ",", "4289", ",", "4395", ",", "4493", ",", 
     "4583", ",", "4689", ",", "4799", ",", "4889", ",", "4969", ",", 
     "5055", ",", "5165", ",", "5275", ",", "5368", ",", "5460", ",", 
     "5568", ",", "5658", ",", "5738", ",", "5838", ",", "5954", ",", 
     "6052", ",", "6134", ",", "6228", ",", "6346", ",", "6454", ",", 
     "6546", ",", "6638", ",", "6746", ",", "6846", ",", "6934", ",", 
     "7040", ",", "7156", ",", "7250", ",", "7330", ",", "7416", ",", 
     "7526", ",", "7638", ",", "7725", ",", "7817", ",", "7927", ",", 
     "8017", ",", "8103", ",", "8205", ",", "8321", ",", "8419", ",", 
     "8507", ",", "8605", ",", "8717", ",", "8823", ",", "8913", ",", 
     "9001", ",", "9105", ",", "9199", ",", "9285", ",", "9387", ",", 
     "9509", ",", "9605", ",", "9683", ",", "9773", ",", "9889", ",", 
     "10003", ",", "10093", ",", "10187", ",", "10297", ",", "10389", 
     ",", "10476", ",", "10576", ",", "10682", ",", "10774", ",", 
     "10856", ",", "10946", ",", "11052", ",", "11152", ",", "11236", 
     ",", "11322", ",", "11430", ",", "11530", ",", "11618", ",", 
     "11726", ",", "11842", ",", "11936", ",", "12018", ",", "12108", 
     ",", "12224", ",", "12336", ",", "12428", ",", "12524", ",", 
     "12634", ",", "12730", ",", "12818", ",", "12920", ",", "13034", 
     ",", "13132", ",", "13216", ",", "13308", ",", "13426", ",", 
     "13532", ",", "13615", ",", "13701", ",", "13807", ",", "13903", 
     ",", "13991", ",", "14097", ",", "14213", ",", "14305", ",", 
     "14391", ",", "14483", ",", "14593", ",", "14703", ",", "14793", 
     ",", "14887", ",", "14999", ",", "15095", ",", "15185", ",", 
     "15289", ",", "15407", ",", "15509", ",", "15591", ",", "15685", 
     ",", "15799", ",", "15903", ",", "15987", ",", "16073", ",", 
     "16177", ",", "16275", ",", "16369", ",", "16479", ",", "16593", 
     ",", "16687", ",", "16771", ",", "16863", ",", "16977", ",", 
     "17089", ",", "17180", ",", "17272", ",", "17382", ",", "17474", 
     ",", "17554", ",", "17654", ",", "17770", ",", "17868", ",", 
     "17948", ",", "18042", ",", "18160", ",", "18268", ",", "18360", 
     ",", "18450", ",", "18552", ",", "18646", ",", "18734", ",", 
     "18838", ",", "18954", ",", "19048", ",", "19134"}], "}"}]}], 
  ";"}], "\[IndentingNewLine]", 
 RowBox[{"ListLinePlot", "[", 
  RowBox[{
   RowBox[{"Differences", "[", "data", "]"}], ",", 
   RowBox[{"Frame", "\[Rule]", "True"}], ",", 
   RowBox[{"AspectRatio", "\[Rule]", 
    RowBox[{"1", "/", "3"}]}], ",", 
   RowBox[{"Filling", "\[Rule]", "Axis"}], ",", 
   RowBox[{"PlotStyle", "\[Rule]", 
    RowBox[{
     RowBox[{
     "ResourceFunction", "[", 
      "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
     RowBox[{"\"\<GenericLinePlot\>\"", ",", "\"\<PlotStyles\>\""}], 
     "]"}]}]}], "]"}]}], "Input"]
}, Open  ]]

In other words, among all 4096 Turing machines, about 100 “novel configurations” are reached at each successive step. (The actual sequence here looks surprisingly random; it’s not clear whether there’s any particular regularity.)

Now let’s look at the actual graphs formed. With 4 through 7 steps we get:

Table
&#10005

Table[SimpleGraph[
  Flatten@Table[
    DirectedEdge @@@ 
     Partition[
      TuringMachine[tm, {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]}, 
       t], 2, 1], {tm, 0, 4095}], 
  EdgeStyle -> RGBColor[0.92, 0.17, 0.24]], {t, 4, 7}]

After 10 and 20 steps the results are:

ParallelTable
&#10005

ParallelTable[
 SimpleGraph[
  Flatten@Table[
    DirectedEdge @@@ 
     Partition[
      TuringMachine[tm, {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]}, 
       t], 2, 1], {tm, 0, 4095}], 
  EdgeStyle -> RGBColor[0.92, 0.17, 0.24], 
  VertexStyle -> Darker[RGBColor[0.92, 0.17, 0.24], 0.4], 
  ImageSize -> 250], {t, {10, 20}}]

Here is the result after 50 steps:

big = SimpleGraph
&#10005

big = SimpleGraph[
  With[{t = 50}, 
   Flatten@Table[
     DirectedEdge @@@ 
      Partition[
       TuringMachine[tm, {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]}, 
        t], 2, 1], {tm, 0, 4095}]], 
  EdgeStyle -> RGBColor[0.92, 0.17, 0.24], 
  VertexStyle -> Darker[RGBColor[0.92, 0.17, 0.24], 0.4], 
  VertexSize -> Tiny, 
  GraphLayout -> {"SpringElectricalEmbedding", 
    "InferentialDistance" -> 200, "StepControl" -> "NonMonotonic"}]

There’s a surprising amount of structure in these graphs. There’s a “central region” near the initial blank-tape configuration (shown highlighted below) in which many different Turing machines end up visiting the same configurations:

With
&#10005

With[{big = 
   SimpleGraph[
    With[{t = 50}, 
     Flatten@Table[
       DirectedEdge @@@ 
        Partition[
         TuringMachine[tm, {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
           t], 2, 1], {tm, 0, 4095}]], 
    EdgeStyle -> RGBColor[0.92, 0.17, 0.24], 
    VertexStyle -> Darker[RGBColor[0.92, 0.17, 0.24], 0.4], 
    VertexSize -> Tiny, 
    GraphLayout -> {"SpringElectricalEmbedding", 
      "InferentialDistance" -> 200, 
      "StepControl" -> "NonMonotonic"}]}, 
 HighlightGraph[big, Style[First[VertexList[big]], PointSize[0.04]], 
  PlotRange -> {{55, 85}, {50, 80}}]]

Here’s a 3D rendering of this region:

With
&#10005

With[{big = 
   SimpleGraph[
    With[{t = 50}, 
     Flatten@Table[
       DirectedEdge @@@ 
        Partition[
         TuringMachine[tm, {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
           t], 2, 1], {tm, 0, 4095}]], 
    EdgeStyle -> RGBColor[0.92, 0.17, 0.24], 
    VertexStyle -> Darker[RGBColor[0.92, 0.17, 0.24], 0.4], 
    VertexSize -> Tiny, 
    GraphLayout -> {"SpringElectricalEmbedding", 
      "InferentialDistance" -> 200, 
      "StepControl" -> "NonMonotonic"}]}, 
 Graph3D[big, 
  PlotRange -> {{50.32304, 70.32304}, {43.796, 63.796}, {30.87617, 
     50.87617}}, Boxed -> True]]

But away from this region there end up being “spokes” (about 100 of them) corresponding to Turing machines that “independently explore new territory” in the space of configurations.

What are those “configurations on the edge” like? Here are sorted collections of them for the first few steps:

Table
&#10005

Table[Labeled[
  With[{g = 
     SimpleGraph[
      Flatten@Table[
        DirectedEdge @@@ 
         Partition[
          TuringMachine[
           tm, {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]}, t], 2, 
          1], {tm, 0, 4095}]]}, 
   RulePlot[TuringMachine[2506], 
    Sort[Select[VertexList[g], VertexOutDegree[g, #] == 0 &]], 
    Mesh -> All, Frame -> None]], Style[Text[t], 10]], {t, 2, 5}]

For comparison, here is the result for all configurations that can be reached by non-deterministic Turing machines after just 2 steps:

RulePlot[TuringMachine[2506]
&#10005

CloudGet[CloudObject[
  "https://www.wolframcloud.com/obj/wolframphysics/Bulletin/DeltaTM.\
wl"]]; RulePlot[TuringMachine[2506], 
 With[{t = 2}, 
  ToExpression /@ 
   VertexList[
    ResourceFunction["MultiwayTuringMachine"][
     AllDeltaTMRules[{2, 2}], {{1, t + 1, 0}, 
      ConstantArray[0, 2 t + 1]}, t, "StatesGraphStructure"]]], 
 Mesh -> All, Frame -> None]

Here are the results for deterministic Turing machines after more steps:

ParallelTable
&#10005

ParallelTable[
 Labeled[With[{g = 
     SimpleGraph[
      Flatten@Table[
        DirectedEdge @@@ 
         Partition[
          TuringMachine[
           tm, {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]}, t], 2, 
          1], {tm, 0, 4095}]]}, 
   RulePlot[TuringMachine[2506], 
    Sort[Select[VertexList[g], VertexOutDegree[g, #] == 0 &]]]], 
  Style[Text[t], 10]], {t, 10, 50, 10}]

We can also ask which machines are the ones that typically “explore new territory”. Here’s the result for 30 steps:

Keys
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{"With", "[", 
  RowBox[{
   RowBox[{"{", 
    RowBox[{"t", "=", "30"}], "}"}], ",", 
   RowBox[{"Module", "[", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{
       RowBox[{"g", "=", 
        RowBox[{"SimpleGraph", "[", 
         RowBox[{"Flatten", "@", 
          RowBox[{"Table", "[", 
           RowBox[{
            RowBox[{"DirectedEdge", "@@@", 
             RowBox[{"Partition", "[", 
              RowBox[{
               RowBox[{"TuringMachine", "[", 
                RowBox[{"tm", ",", 
                 RowBox[{"{", 
                  RowBox[{
                   RowBox[{"{", 
                    RowBox[{"1", ",", 
                    RowBox[{"t", "+", "1"}], ",", "0"}], "}"}], ",", 
                   RowBox[{"Table", "[", 
                    RowBox[{"0", ",", 
                    RowBox[{
                    RowBox[{"2", "t"}], "+", "1"}]}], "]"}]}], "}"}], 
                 ",", "t"}], "]"}], ",", "2", ",", "1"}], "]"}]}], 
            ",", 
            RowBox[{"{", 
             RowBox[{"tm", ",", "0", ",", "4095"}], "}"}]}], "]"}]}], 
         "]"}]}], ",", 
       RowBox[{"allstates", "=", 
        RowBox[{"Table", "[", 
         RowBox[{
          RowBox[{"TuringMachine", "[", 
           RowBox[{"tm", ",", 
            RowBox[{"{", 
             RowBox[{
              RowBox[{"{", 
               RowBox[{"1", ",", 
                RowBox[{"t", "+", "1"}], ",", "0"}], "}"}], ",", 
              RowBox[{"Table", "[", 
               RowBox[{"0", ",", 
                RowBox[{
                 RowBox[{"2", "t"}], "+", "1"}]}], "]"}]}], "}"}], 
            ",", "t"}], "]"}], ",", 
          RowBox[{"{", 
           RowBox[{"tm", ",", "0", ",", "4095"}], "}"}]}], "]"}]}], 
       ",", "tms"}], "}"}], ",", 
     RowBox[{
      RowBox[{"tms", "=", 
       RowBox[{"Map", "[", 
        RowBox[{
         RowBox[{
          RowBox[{"Position", "[", 
           RowBox[{"allstates", ",", "#"}], "]"}], "&"}], ",", 
         RowBox[{"Select", "[", 
          RowBox[{
           RowBox[{"VertexList", "[", "g", "]"}], ",", 
           RowBox[{
            RowBox[{
             RowBox[{"VertexOutDegree", "[", 
              RowBox[{"g", ",", "#"}], "]"}], "\[Equal]", "0"}], 
            "&"}]}], "]"}]}], "]"}]}], ";", 
      RowBox[{
       RowBox[{
        RowBox[{"(", 
         RowBox[{
          RowBox[{"#", "[", 
           RowBox[{"[", 
            RowBox[{"1", ",", "1"}], "]"}], "]"}], "-", "1"}], ")"}], 
        "&"}], "/@", 
       RowBox[{"tms", "[", 
        RowBox[{"[", 
         RowBox[{
          RowBox[{"Position", "[", 
           RowBox[{
            RowBox[{"Length", "/@", "tms"}], ",", "1"}], "]"}], "//", 
          "Flatten"}], "]"}], "]"}]}]}]}], "]"}]}], "]"}]], "Input"],

Cell[BoxData[
 RowBox[{"Keys", "[", 
  RowBox[{"ReverseSort", "[", 
   RowBox[{"Counts", "[", 
    RowBox[{
     RowBox[{
      RowBox[{"RulePlot", "[", 
       RowBox[{
        RowBox[{"TuringMachine", "[", "#", "]"}], ",", 
        RowBox[{"{", 
         RowBox[{"1", ",", 
          RowBox[{"{", 
           RowBox[{
            RowBox[{"{", "}"}], ",", "0"}], "}"}]}], "}"}], ",", "9", 
        ",", 
        RowBox[{"ImageSize", "\[Rule]", 
         RowBox[{"{", 
          RowBox[{"Automatic", ",", "45"}], "}"}]}], ",", 
        RowBox[{"FrameStyle", "\[Rule]", "LightGray"}]}], "]"}], 
      "&"}], "/@", 
     RowBox[{"{", 
      RowBox[{
      "378", ",", "391", ",", "407", ",", "819", ",", "974", ",", 
       "990", ",", "1331", ",", "1402", ",", "1415", ",", "1431", ",",
        "1439", ",", "1482", ",", "1498", ",", "1506", ",", "1514", 
       ",", "1520", ",", "1528", ",", "1530", ",", "1843", ",", 
       "1914", ",", "1923", ",", "1939", ",", "1955", ",", "1963", 
       ",", "1969", ",", "1971", ",", "1977", ",", "1998", ",", 
       "2006", ",", "2014", ",", "2426", ",", "2451", ",", "2455", 
       ",", "2498", ",", "2506", ",", "2514", ",", "2518", ",", 
       "2522", ",", "2530", ",", "2538", ",", "2546", ",", "2554", 
       ",", "2867", ",", "2947", ",", "2955", ",", "2963", ",", 
       "2971", ",", "2975", ",", "2979", ",", "2987", ",", "2995", 
       ",", "3003", ",", "3034", ",", "3038", ",", "3459", ",", 
       "3479", ",", "3499", ",", "3522", ",", "3530", ",", "3538", 
       ",", "3540", ",", "3554", ",", "3562", ",", "3570", ",", 
       "3578", ",", "3971", ",", "3979", ",", "3995", ",", "3997", 
       ",", "4003", ",", "4011", ",", "4019", ",", "4027", ",", 
       "4042", ",", "4062", ",", "4066"}], "}"}]}], "]"}], "]"}], 
  "]"}]], "Input"]
}, Open  ]]

As we go to more steps, the graph of configurations that can be reached by deterministic Turing machines grows. But does at least the core of it reach some kind of limit after sufficiently many steps? We can get a sense of this by looking—as we have done so many times before—at the growth rate of the geodesic ball in the graph starting from the initial blank-tape configuration. The total number of new configurations that can be reached on each new layer of the geodesic ball is at most 4096—and in reality it’s much smaller. Here are the numbers of new configurations added on successive layers at steps 100, 200, …, 500 in the overall evolution:

ListLinePlot
&#10005

Cell[CellGroupData[{
	Cell[BoxData[
 RowBox[{
  RowBox[{"data", "=", 
   RowBox[{
    RowBox[{
    "ResourceFunction", "[", "\"\<ParallelMapMonitored\>\"", "]"}], 
    "[", 
    RowBox[{
     RowBox[{
      RowBox[{"With", "[", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{"t", "=", "#"}], "}"}], ",", 
        RowBox[{"Differences", "[", 
         RowBox[{"First", "[", 
          RowBox[{
           RowBox[{
            RowBox[{"Values", "[", 
             RowBox[{
              RowBox[{
              "ResourceFunction", "[", 
               "\"\<GraphNeighborhoodVolumes\>\"", "]"}], "[", 
              RowBox[{"#", ",", 
               RowBox[{"{", 
                RowBox[{"{", 
                 RowBox[{
                  RowBox[{"{", 
                   RowBox[{"1", ",", 
                    RowBox[{"t", "+", "1"}], ",", "0"}], "}"}], ",", 
                  RowBox[{"ConstantArray", "[", 
                   RowBox[{"0", ",", 
                    RowBox[{
                    RowBox[{"2", "t"}], "+", "1"}]}], "]"}]}], "}"}], 
                "}"}]}], "]"}], "]"}], "&"}], "[", 
           RowBox[{"Graph", "[", 
            RowBox[{"Flatten", "@", 
             RowBox[{"ParallelTable", "[", 
              RowBox[{
               RowBox[{"DirectedEdge", "@@@", 
                RowBox[{"Partition", "[", 
                 RowBox[{
                  RowBox[{"TuringMachine", "[", 
                   RowBox[{"tm", ",", 
                    RowBox[{"{", 
                    RowBox[{
                    RowBox[{"{", 
                    RowBox[{"1", ",", 
                    RowBox[{"t", "+", "1"}], ",", "0"}], "}"}], ",", 
                    RowBox[{"ConstantArray", "[", 
                    RowBox[{"0", ",", 
                    RowBox[{
                    RowBox[{"2", "t"}], "+", "1"}]}], "]"}]}], "}"}], 
                    ",", "t"}], "]"}], ",", "2", ",", "1"}], "]"}]}], 
               ",", 
               RowBox[{"{", 
                RowBox[{"tm", ",", "0", ",", "4095"}], "}"}]}], 
              "]"}]}], "]"}], "]"}], "]"}], "]"}]}], "]"}], "&"}], 
     ",", 
     RowBox[{"Range", "[", 
      RowBox[{"100", ",", "500", ",", "100"}], "]"}]}], "]"}]}], 
  ";"}]], "Input"],

Cell[BoxData[
 RowBox[{
  RowBox[{"data", "=", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{
      "8", ",", "27", ",", "56", ",", "88", ",", "110", ",", "148", 
       ",", "166", ",", "177", ",", "196", ",", "198", ",", "200", 
       ",", "198", ",", "190", ",", "190", ",", "186", ",", "187", 
       ",", "186", ",", "186", ",", "176", ",", "176", ",", "170", 
       ",", "170", ",", "162", ",", "164", ",", "158", ",", "158", 
       ",", "150", ",", "149", ",", "144", ",", "146", ",", "136", 
       ",", "138", ",", "134", ",", "138", ",", "124", ",", "122", 
       ",", "104", ",", "106", ",", "94", ",", "100", ",", "96", ",", 
       "95", ",", "88", ",", "92", ",", "90", ",", "94", ",", "88", 
       ",", "92", ",", "88", ",", "92", ",", "76", ",", "64", ",", 
       "54", ",", "56", ",", "54", ",", "54", ",", "56", ",", "55", 
       ",", "52", ",", "52", ",", "54", ",", "54", ",", "52", ",", 
       "52", ",", "52", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", 
       ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", 
       "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", 
       ",", "50", ",", "48", ",", "50", ",", "48", ",", "48", ",", 
       "42", ",", "44", ",", "36", ",", "36"}], "}"}], ",", 
     RowBox[{"{", 
      RowBox[{
      "8", ",", "27", ",", "56", ",", "88", ",", "110", ",", "148", 
       ",", "168", ",", "185", ",", "212", ",", "212", ",", "218", 
       ",", "212", ",", "214", ",", "218", ",", "214", ",", "215", 
       ",", "216", ",", "216", ",", "204", ",", "202", ",", "196", 
       ",", "194", ",", "188", ",", "190", ",", "186", ",", "192", 
       ",", "186", ",", "185", ",", "182", ",", "182", ",", "176", 
       ",", "180", ",", "178", ",", "178", ",", "172", ",", "172", 
       ",", "166", ",", "168", ",", "162", ",", "166", ",", "164", 
       ",", "165", ",", "156", ",", "160", ",", "156", ",", "154", 
       ",", "148", ",", "148", ",", "150", ",", "150", ",", "148", 
       ",", "148", ",", "148", ",", "150", ",", "140", ",", "142", 
       ",", "138", ",", "141", ",", "132", ",", "136", ",", "134", 
       ",", "138", ",", "132", ",", "136", ",", "134", ",", "138", 
       ",", "132", ",", "132", ",", "118", ",", "120", ",", "104", 
       ",", "100", ",", "96", ",", "98", ",", "90", ",", "97", ",", 
       "94", ",", "94", ",", "88", ",", "92", ",", "90", ",", "98", 
       ",", "92", ",", "92", ",", "90", ",", "94", ",", "88", ",", 
       "94", ",", "90", ",", "96", ",", "90", ",", "94", ",", "92", 
       ",", "96", ",", "90", ",", "93", ",", "90", ",", "94", ",", 
       "86", ",", "90", ",", "78", ",", "66", ",", "52", ",", "52", 
       ",", "54", ",", "54", ",", "52", ",", "52", ",", "54", ",", 
       "54", ",", "54", ",", "54", ",", "56", ",", "56", ",", "54", 
       ",", "54", ",", "56", ",", "55", ",", "52", ",", "52", ",", 
       "54", ",", "54", ",", "50", ",", "50", ",", "52", ",", "52", 
       ",", "50", ",", "50", ",", "52", ",", "52", ",", "50", ",", 
       "50", ",", "52", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", 
       ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", 
       "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", 
       ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", 
       "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", 
       ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", 
       "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", 
       ",", "48", ",", "50", ",", "48", ",", "48", ",", "42", ",", 
       "44", ",", "36", ",", "36"}], "}"}], ",", 
     RowBox[{"{", 
      RowBox[{
      "8", ",", "27", ",", "56", ",", "88", ",", "110", ",", "148", 
       ",", "168", ",", "187", ",", "218", ",", "222", ",", "236", 
       ",", "226", ",", "232", ",", "230", ",", "228", ",", "227", 
       ",", "230", ",", "232", ",", "234", ",", "230", ",", "226", 
       ",", "220", ",", "214", ",", "210", ",", "208", ",", "214", 
       ",", "210", ",", "209", ",", "204", ",", "202", ",", "196", 
       ",", "198", ",", "198", ",", "198", ",", "190", ",", "188", 
       ",", "182", ",", "184", ",", "176", ",", "178", ",", "176", 
       ",", "177", ",", "168", ",", "172", ",", "168", ",", "170", 
       ",", "164", ",", "166", ",", "164", ",", "168", ",", "162", 
       ",", "166", ",", "164", ",", "170", ",", "164", ",", "168", 
       ",", "166", ",", "169", ",", "162", ",", "166", ",", "162", 
       ",", "164", ",", "156", ",", "160", ",", "156", ",", "154", 
       ",", "148", ",", "148", ",", "150", ",", "148", ",", "148", 
       ",", "148", ",", "150", ",", "150", ",", "148", ",", "147", 
       ",", "148", ",", "148", ",", "140", ",", "142", ",", "136", 
       ",", "138", ",", "130", ",", "134", ",", "132", ",", "136", 
       ",", "130", ",", "134", ",", "132", ",", "138", ",", "132", 
       ",", "136", ",", "134", ",", "138", ",", "132", ",", "135", 
       ",", "132", ",", "136", ",", "130", ",", "134", ",", "132", 
       ",", "128", ",", "110", ",", "110", ",", "98", ",", "104", ",",
        "92", ",", "92", ",", "90", ",", "94", ",", "90", ",", "98", 
       ",", "96", ",", "96", ",", "90", ",", "94", ",", "92", ",", 
       "99", ",", "92", ",", "92", ",", "90", ",", "94", ",", "88", 
       ",", "96", ",", "94", ",", "94", ",", "88", ",", "92", ",", 
       "90", ",", "96", ",", "90", ",", "92", ",", "90", ",", "96", 
       ",", "90", ",", "94", ",", "92", ",", "96", ",", "90", ",", 
       "94", ",", "92", ",", "95", ",", "88", ",", "92", ",", "90", 
       ",", "94", ",", "88", ",", "92", ",", "88", ",", "92", ",", 
       "76", ",", "64", ",", "54", ",", "54", ",", "52", ",", "52", 
       ",", "54", ",", "54", ",", "54", ",", "54", ",", "56", ",", 
       "56", ",", "54", ",", "54", ",", "56", ",", "56", ",", "54", 
       ",", "53", ",", "54", ",", "54", ",", "52", ",", "52", ",", 
       "54", ",", "54", ",", "52", ",", "52", ",", "54", ",", "54", 
       ",", "52", ",", "52", ",", "54", ",", "54", ",", "52", ",", 
       "52", ",", "52", ",", "52", ",", "50", ",", "50", ",", "52", 
       ",", "52", ",", "50", ",", "50", ",", "52", ",", "52", ",", 
       "50", ",", "50", ",", "52", ",", "52", ",", "50", ",", "50", 
       ",", "52", ",", "52", ",", "50", ",", "50", ",", "50", ",", 
       "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", 
       ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", 
       "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", 
       ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", 
       "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", 
       ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", 
       "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", 
       ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", 
       "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", 
       ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", 
       "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", 
       ",", "50", ",", "52", ",", "50", ",", "50", ",", "48", ",", 
       "50", ",", "48", ",", "48", ",", "42", ",", "44", ",", "36", 
       ",", "36"}], "}"}], ",", 
     RowBox[{"{", 
      RowBox[{
      "8", ",", "27", ",", "56", ",", "88", ",", "110", ",", "148", 
       ",", "168", ",", "187", ",", "220", ",", "226", ",", "240", 
       ",", "230", ",", "238", ",", "234", ",", "234", ",", "233", 
       ",", "236", ",", "236", ",", "240", ",", "240", ",", "240", 
       ",", "232", ",", "226", ",", "220", ",", "218", ",", "224", 
       ",", "220", ",", "219", ",", "218", ",", "216", ",", "210", 
       ",", "212", ",", "212", ",", "212", ",", "206", ",", "204", 
       ",", "198", ",", "198", ",", "190", ",", "192", ",", "190", 
       ",", "191", ",", "184", ",", "188", ",", "186", ",", "186", 
       ",", "180", ",", "180", ",", "178", ",", "182", ",", "176", 
       ",", "176", ",", "174", ",", "176", ",", "168", ",", "172", 
       ",", "170", ",", "173", ",", "168", ",", "170", ",", "168", 
       ",", "170", ",", "166", ",", "170", ",", "170", ",", "172", 
       ",", "166", ",", "168", ",", "166", ",", "168", ",", "162", 
       ",", "166", ",", "164", ",", "168", ",", "162", ",", "165", 
       ",", "162", ",", "166", ",", "160", ",", "164", ",", "162", 
       ",", "164", ",", "156", ",", "160", ",", "156", ",", "154", 
       ",", "148", ",", "148", ",", "150", ",", "152", ",", "150", 
       ",", "150", ",", "152", ",", "152", ",", "150", ",", "149", 
       ",", "150", ",", "150", ",", "148", ",", "148", ",", "150", 
       ",", "150", ",", "146", ",", "146", ",", "140", ",", "142", 
       ",", "134", ",", "138", ",", "134", ",", "138", ",", "134", 
       ",", "138", ",", "136", ",", "140", ",", "134", ",", "138", 
       ",", "136", ",", "139", ",", "132", ",", "136", ",", "134", 
       ",", "138", ",", "132", ",", "136", ",", "134", ",", "138", 
       ",", "132", ",", "136", ",", "134", ",", "138", ",", "132", 
       ",", "136", ",", "134", ",", "140", ",", "124", ",", "124", 
       ",", "108", ",", "108", ",", "94", ",", "96", ",", "92", ",", 
       "99", ",", "92", ",", "92", ",", "90", ",", "94", ",", "88", 
       ",", "96", ",", "94", ",", "94", ",", "88", ",", "92", ",", 
       "90", ",", "98", ",", "92", ",", "92", ",", "90", ",", "94", 
       ",", "90", ",", "98", ",", "96", ",", "96", ",", "90", ",", 
       "94", ",", "92", ",", "100", ",", "94", ",", "93", ",", "90", 
       ",", "94", ",", "88", ",", "96", ",", "92", ",", "94", ",", 
       "88", ",", "92", ",", "90", ",", "94", ",", "88", ",", "92", 
       ",", "90", ",", "94", ",", "88", ",", "92", ",", "90", ",", 
       "96", ",", "90", ",", "94", ",", "92", ",", "96", ",", "90", 
       ",", "94", ",", "92", ",", "96", ",", "90", ",", "93", ",", 
       "90", ",", "94", ",", "86", ",", "90", ",", "78", ",", "66", 
       ",", "52", ",", "52", ",", "54", ",", "54", ",", "52", ",", 
       "52", ",", "54", ",", "54", ",", "52", ",", "52", ",", "54", 
       ",", "54", ",", "54", ",", "54", ",", "56", ",", "56", ",", 
       "54", ",", "54", ",", "56", ",", "56", ",", "54", ",", "54", 
       ",", "56", ",", "55", ",", "52", ",", "52", ",", "54", ",", 
       "54", ",", "52", ",", "52", ",", "54", ",", "54", ",", "52", 
       ",", "52", ",", "54", ",", "54", ",", "50", ",", "50", ",", 
       "52", ",", "52", ",", "50", ",", "50", ",", "52", ",", "52", 
       ",", "50", ",", "50", ",", "52", ",", "52", ",", "50", ",", 
       "50", ",", "52", ",", "52", ",", "50", ",", "50", ",", "52", 
       ",", "52", ",", "50", ",", "50", ",", "52", ",", "52", ",", 
       "50", ",", "50", ",", "52", ",", "52", ",", "50", ",", "50", 
       ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", 
       "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", 
       ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", 
       "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", 
       ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", 
       "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", 
       ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", 
       "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", 
       ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", 
       "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", 
       ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", 
       "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", 
       ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", 
       "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", 
       ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", 
       "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", 
       ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", 
       "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "48", ",", "50", ",", 
       "48", ",", "48", ",", "42", ",", "44", ",", "36", ",", "36"}], 
      "}"}], ",", 
     RowBox[{"{", 
      RowBox[{
      "8", ",", "27", ",", "56", ",", "88", ",", "110", ",", "148", 
       ",", "168", ",", "187", ",", "220", ",", "228", ",", "246", 
       ",", "240", ",", "258", ",", "248", ",", "252", ",", "247", 
       ",", "250", ",", "246", ",", "248", ",", "248", ",", "252", 
       ",", "246", ",", "244", ",", "240", ",", "238", ",", "240", 
       ",", "238", ",", "237", ",", "238", ",", "234", ",", "228", 
       ",", "228", ",", "230", ",", "230", ",", "228", ",", "224", 
       ",", "218", ",", "216", ",", "204", ",", "206", ",", "200", 
       ",", "201", ",", "194", ",", "198", ",", "196", ",", "196", 
       ",", "190", ",", "190", ",", "188", ",", "192", ",", "186", 
       ",", "186", ",", "184", ",", "186", ",", "178", ",", "182", 
       ",", "180", ",", "181", ",", "176", ",", "176", ",", "172", 
       ",", "174", ",", "168", ",", "172", ",", "172", ",", "174", 
       ",", "168", ",", "170", ",", "168", ",", "170", ",", "164", 
       ",", "166", ",", "164", ",", "168", ",", "162", ",", "165", 
       ",", "162", ",", "166", ",", "160", ",", "164", ",", "162", 
       ",", "166", ",", "160", ",", "164", ",", "162", ",", "166", 
       ",", "160", ",", "164", ",", "162", ",", "168", ",", "162", 
       ",", "166", ",", "164", ",", "168", ",", "162", ",", "165", 
       ",", "162", ",", "166", ",", "160", ",", "164", ",", "162", 
       ",", "164", ",", "156", ",", "160", ",", "156", ",", "154", 
       ",", "148", ",", "148", ",", "150", ",", "150", ",", "150", 
       ",", "150", ",", "152", ",", "152", ",", "150", ",", "150", 
       ",", "152", ",", "151", ",", "148", ",", "148", ",", "150", 
       ",", "150", ",", "148", ",", "148", ",", "150", ",", "150", 
       ",", "148", ",", "148", ",", "144", ",", "146", ",", "136", 
       ",", "138", ",", "134", ",", "140", ",", "132", ",", "136", 
       ",", "134", ",", "138", ",", "132", ",", "136", ",", "134", 
       ",", "137", ",", "130", ",", "134", ",", "132", ",", "136", 
       ",", "130", ",", "134", ",", "132", ",", "136", ",", "130", 
       ",", "134", ",", "132", ",", "136", ",", "130", ",", "134", 
       ",", "132", ",", "136", ",", "132", ",", "136", ",", "134", 
       ",", "138", ",", "132", ",", "136", ",", "134", ",", "138", 
       ",", "132", ",", "131", ",", "116", ",", "116", ",", "98", ",",
        "102", ",", "98", ",", "96", ",", "88", ",", "92", ",", "90", 
       ",", "98", ",", "92", ",", "92", ",", "90", ",", "94", ",", 
       "88", ",", "96", ",", "94", ",", "96", ",", "90", ",", "94", 
       ",", "92", ",", "100", ",", "94", ",", "94", ",", "92", ",", 
       "96", ",", "90", ",", "97", ",", "94", ",", "94", ",", "88", 
       ",", "92", ",", "90", ",", "98", ",", "92", ",", "92", ",", 
       "90", ",", "94", ",", "88", ",", "96", ",", "94", ",", "94", 
       ",", "88", ",", "92", ",", "90", ",", "98", ",", "94", ",", 
       "94", ",", "92", ",", "96", ",", "90", ",", "94", ",", "92", 
       ",", "96", ",", "90", ",", "94", ",", "92", ",", "95", ",", 
       "88", ",", "92", ",", "90", ",", "94", ",", "88", ",", "92", 
       ",", "90", ",", "94", ",", "88", ",", "92", ",", "90", ",", 
       "94", ",", "88", ",", "92", ",", "90", ",", "94", ",", "88", 
       ",", "92", ",", "90", ",", "96", ",", "90", ",", "94", ",", 
       "90", ",", "94", ",", "78", ",", "66", ",", "56", ",", "56", 
       ",", "54", ",", "54", ",", "56", ",", "55", ",", "52", ",", 
       "52", ",", "54", ",", "54", ",", "52", ",", "52", ",", "54", 
       ",", "54", ",", "52", ",", "52", ",", "54", ",", "54", ",", 
       "52", ",", "52", ",", "54", ",", "54", ",", "52", ",", "52", 
       ",", "54", ",", "54", ",", "54", ",", "54", ",", "56", ",", 
       "56", ",", "54", ",", "54", ",", "54", ",", "54", ",", "52", 
       ",", "52", ",", "54", ",", "54", ",", "52", ",", "51", ",", 
       "52", ",", "52", ",", "50", ",", "50", ",", "52", ",", "52", 
       ",", "50", ",", "50", ",", "52", ",", "52", ",", "50", ",", 
       "50", ",", "52", ",", "52", ",", "50", ",", "50", ",", "52", 
       ",", "52", ",", "50", ",", "50", ",", "52", ",", "52", ",", 
       "50", ",", "50", ",", "52", ",", "52", ",", "50", ",", "50", 
       ",", "52", ",", "52", ",", "50", ",", "50", ",", "52", ",", 
       "52", ",", "50", ",", "50", ",", "52", ",", "52", ",", "50", 
       ",", "50", ",", "52", ",", "52", ",", "50", ",", "50", ",", 
       "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", 
       ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", 
       "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", 
       ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", 
       "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", 
       ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", 
       "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", 
       ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", 
       "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", 
       ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", 
       "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", 
       ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", 
       "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", 
       ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", 
       "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", 
       ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", 
       "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", 
       ",", "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", 
       "50", ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", 
       ",", "50", ",", "50", ",", "50", ",", "52", ",", "50", ",", 
       "50", ",", "50", ",", "52", ",", "50", ",", "50", ",", "50", 
       ",", "52", ",", "50", ",", "50", ",", "50", ",", "52", ",", 
       "50", ",", "50", ",", "48", ",", "50", ",", "48", ",", "48", 
       ",", "42", ",", "44", ",", "36", ",", "36"}], "}"}]}], "}"}]}],
   ";"}]], "Input"],

Cell[BoxData[
 RowBox[{"ListLinePlot", "[", 
  RowBox[{"data", ",", 
   RowBox[{"Frame", "\[Rule]", "True"}], ",", 
   RowBox[{"AspectRatio", "\[Rule]", 
    RowBox[{"1", "/", "3"}]}], ",", 
   RowBox[{"PlotStyle", "\[Rule]", 
    RowBox[{
     RowBox[{
     "ResourceFunction", "[", 
      "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
     RowBox[{"\"\<GenericLinePlot\>\"", ",", "\"\<PlotStyles\>\""}], 
     "]"}]}]}], "]"}]], "Input"]
}, Open  ]]

The cause of the “steps down” becomes clearer if one examines more closely the “spokes” in the graph above. Here’s one example:

With
&#10005

With[{big = 
   SimpleGraph[
    With[{t = 50}, 
     Flatten@Table[
       DirectedEdge @@@ 
        Partition[
         TuringMachine[tm, {{1, t + 1, 0}, ConstantArray[0, 2 t + 1]},
           t], 2, 1], {tm, 0, 4095}]], 
    EdgeStyle -> RGBColor[0.92, 0.17, 0.24], 
    VertexStyle -> Darker[RGBColor[0.92, 0.17, 0.24], 0.4], 
    VertexSize -> Tiny, 
    GraphLayout -> {"SpringElectricalEmbedding", 
      "InferentialDistance" -> 200, 
      "StepControl" -> "NonMonotonic"}]}, 
 Show[big, PlotRange -> {{85, 95}, {64, 67}}]]

And basically what’s happening is that multiple Turing machines are tracing out roughly the same sequences of configurations, but some do it “efficiently”, while others “waste time”, for example having the head flip around on alternate steps. The “inner parts” of the spokes—that are closer to the initial node—involve both “inefficient” and more efficient Turing machines. But the “inefficient” Turing machines will simply not get as far, so they do not contribute to the outer layers of the geodesic ball. The final “step down” in the plot above—at basically half the total number of steps used for the Turing machines—involves the “petering out” of the roughly half the Turing machines that effectively “waste half their steps”.

For the “spoke” shown, here are the actual Turing machine histories involved (there are 8 machines that made identical copies of the first history):

Keys
&#10005

Keys[Counts[
  RulePlot[TuringMachine[#], {1, {{}, 0}}, 20, 
     FrameStyle -> LightGray, ImageSize -> {Automatic, 150}] & /@ 
   Union[{3491, 439, 951, 1463, 1488, 1492, 1528, 1975, 2487, 2967, 
     2999, 3479, 3511, 3891, 4023, 1528, 3507, 3891, 1528}]]]

The Cellular Automaton Analog

The kind of graphs we’ve just made for deterministic Turing machines can be made for any family of deterministic computational systems. And in particular they can be made for the (at least for me, much more familiar) case of the 256 k = 2, r = 1 cellular automata. (And, yes, it’s somewhat amazing that in all these years I’ve never made such pictures before—though there’s a note on page 956 of A New Kind of Science that gets close.)

Here are the results for 5 and 10 steps, starting from an initial condition containing a single black cell:

Graph
&#10005

Graph[With[{t = #}, 
    Flatten@Table[
      DirectedEdge @@@ 
       Partition[CellularAutomaton[ru, CenterArray[{1}, 2 t + 1], t], 
        2, 1], {ru, 0, 255}]], 
   EdgeStyle -> RGBColor[0.92, 0.17, 0.24], 
   VertexStyle -> Darker[RGBColor[0.92, 0.17, 0.24], 0.4], 
   GraphLayout -> {"SpringElectricalEmbedding", 
     "InferentialDistance" -> 200, "StepControl" -> "NonMonotonic"}, 
   ImageSize -> 280] & /@ {5, 10}

And here is the result for 50 steps:

Graph
&#10005

Graph[With[{t = 50}, 
  Flatten@Table[
    DirectedEdge @@@ 
     Partition[CellularAutomaton[ru, CenterArray[{1}, 2 t + 1], t], 2,
       1], {ru, 0, 255}]], EdgeStyle -> RGBColor[0.92, 0.17, 0.24], 
 VertexStyle -> Darker[RGBColor[0.92, 0.17, 0.24], 0.4], 
 VertexSize -> Tiny, 
 GraphLayout -> {"SpringElectricalEmbedding", 
   "InferentialDistance" -> 200, "StepControl" -> "NonMonotonic"}]

Here is the result for 10 steps, annotated with the actual cellular automaton evolution for the rules that “reach furthest”:

With
&#10005

With[{t = 10}, 
 With[{g = 
    Graph[Flatten@
      Table[DirectedEdge @@@ 
        Partition[CellularAutomaton[tm, CenterArray[{1}, 2 t + 1], t],
          2, 1], {tm, 0, 255}], 
     EdgeStyle -> RGBColor[0.92, 0.17, 0.24], 
     VertexStyle -> Darker[RGBColor[0.92, 0.17, 0.24], 0.4], 
     GraphLayout -> {"SpringElectricalEmbedding", 
       "InferentialDistance" -> 200, 
       "StepControl" -> "NonMonotonic"}]}, 
  With[{call = 
     Table[CellularAutomaton[ru, CenterArray[{1}, 2 t + 1], t], {ru, 
       0, 255}]}, 
   Graph[g, 
    VertexLabels -> (# -> 
         ArrayPlot[
          CellularAutomaton[
           First@FirstPosition[call, #] - 1, {{1}, 0}, {t, All}], 
          ImageSize -> 35] & /@ 
       Pick[VertexList[g], VertexOutDegree[g], 0])]]]]

It’s slightly easier to see what’s going on if we include only even-numbered rules (which leave a blank state blank):

With
&#10005

With[{t = 10}, 
 With[{g = 
    Graph[Flatten@
      Table[DirectedEdge @@@ 
        Partition[CellularAutomaton[tm, CenterArray[{1}, 2 t + 1], t],
          2, 1], {tm, 0, 255, 2}], 
     EdgeStyle -> RGBColor[0.92, 0.17, 0.24], 
     VertexStyle -> Darker[RGBColor[0.92, 0.17, 0.24], 0.4], 
     GraphLayout -> {"SpringElectricalEmbedding", 
       "InferentialDistance" -> 200, 
       "StepControl" -> "NonMonotonic"}]}, 
  With[{call = 
     Table[CellularAutomaton[ru, CenterArray[{1}, 2 t + 1], t], {ru, 
       0, 255}]}, 
   Graph[g, 
    VertexLabels -> (# -> (ArrayPlot[
           CellularAutomaton[(First[
               Select[First /@ Position[call, #], OddQ]]) - 1, {{1}, 
             0}, {t, All}], ImageSize -> 35]) & /@ 
       Pick[VertexList[g], VertexOutDegree[g], 0])]]]]

It’s an interesting map of “cellular automaton space”. (Note the presence of rule 30 on the lower left, and rule 110 on the lower right.)

The total number of new configurations explored by all rules on successive steps has a more regular form than for Turing machines:

ListLinePlot
&#10005

Cell[CellGroupData[{
Cell[BoxData[
 RowBox[{
  RowBox[{"data", "=", 
   RowBox[{"With", "[", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{"t", "=", "200"}], "}"}], ",", 
     RowBox[{"With", "[", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"rr", "=", 
         RowBox[{"Table", "[", 
          RowBox[{
           RowBox[{"DirectedEdge", "@@@", 
            RowBox[{"Partition", "[", 
             RowBox[{
              RowBox[{"CellularAutomaton", "[", 
               RowBox[{"ru", ",", 
                RowBox[{"CenterArray", "[", 
                 RowBox[{
                  RowBox[{"{", "1", "}"}], ",", 
                  RowBox[{
                   RowBox[{"2", "t"}], "+", "1"}]}], "]"}], ",", 
                "t"}], "]"}], ",", "2", ",", "1"}], "]"}]}], ",", 
           RowBox[{"{", 
            RowBox[{"ru", ",", "0", ",", "255"}], "}"}]}], "]"}]}], 
        "}"}], ",", 
       RowBox[{"Table", "[", 
        RowBox[{
         RowBox[{"VertexCount", "[", 
          RowBox[{"Graph", "[", 
           RowBox[{"Flatten", "[", 
            RowBox[{"Take", "[", 
             RowBox[{"rr", ",", "All", ",", "u"}], "]"}], "]"}], 
           "]"}], "]"}], ",", 
         RowBox[{"{", 
          RowBox[{"u", ",", "t"}], "}"}]}], "]"}]}], "]"}]}], "]"}]}],
   ";"}]], "Input"],

Cell[BoxData[
 RowBox[{"ListLinePlot", "[", 
  RowBox[{
   RowBox[{"Differences", "[", "data", "]"}], ",", 
   RowBox[{"Frame", "\[Rule]", "True"}], ",", 
   RowBox[{"AspectRatio", "\[Rule]", 
    RowBox[{"1", "/", "3"}]}], ",", 
   RowBox[{"Filling", "\[Rule]", "Axis"}], ",", 
   RowBox[{"PlotStyle", "\[Rule]", 
    RowBox[{
     RowBox[{
     "ResourceFunction", "[", 
      "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
     RowBox[{"\"\<GenericLinePlot\>\"", ",", "\"\<PlotStyles\>\""}], 
     "]"}]}]}], "]"}]], "Input"]
}, Open  ]]

The result mostly alternates with period 4 between 72 and 84, though with dips at steps of the form 2m.

If we go for a certain number of steps (say 200), and then look at the geodesic ball centered on the initial condition, the number of configurations in successive layers is just:

ListLinePlot
&#10005

Cell[CellGroupData[{
		Cell[BoxData[
 RowBox[{
  RowBox[{"data", "=", 
   RowBox[{"With", "[", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{"t", "=", "200"}], "}"}], ",", 
     RowBox[{"Differences", "[", 
      RowBox[{"First", "[", 
       RowBox[{
        RowBox[{
         RowBox[{"Values", "[", 
          RowBox[{
           RowBox[{
           "ResourceFunction", "[", 
            "\"\<GraphNeighborhoodVolumes\>\"", "]"}], "[", 
           RowBox[{"#", ",", 
            RowBox[{"{", 
             RowBox[{"CenterArray", "[", 
              RowBox[{
               RowBox[{"{", "1", "}"}], ",", 
               RowBox[{
                RowBox[{"2", "t"}], "+", "1"}]}], "]"}], "}"}]}], 
           "]"}], "]"}], "&"}], "[", 
        RowBox[{"Graph", "[", 
         RowBox[{"Flatten", "@", 
          RowBox[{"ParallelTable", "[", 
           RowBox[{
            RowBox[{"DirectedEdge", "@@@", 
             RowBox[{"Partition", "[", 
              RowBox[{
               RowBox[{"CellularAutomaton", "[", 
                RowBox[{"ru", ",", 
                 RowBox[{"CenterArray", "[", 
                  RowBox[{
                   RowBox[{"{", "1", "}"}], ",", 
                   RowBox[{
                    RowBox[{"2", "t"}], "+", "1"}]}], "]"}], ",", 
                 "t"}], "]"}], ",", "2", ",", "1"}], "]"}]}], ",", 
            RowBox[{"{", 
             RowBox[{"ru", ",", "0", ",", "255"}], "}"}]}], "]"}]}], 
         "]"}], "]"}], "]"}], "]"}]}], "]"}]}], ";"}]], "Input"],

Cell[BoxData[
 RowBox[{"ListLinePlot", "[", 
  RowBox[{"data", ",", 
   RowBox[{"Frame", "\[Rule]", "True"}], ",", 
   RowBox[{"AspectRatio", "\[Rule]", 
    RowBox[{"1", "/", "3"}]}], ",", 
   RowBox[{"Filling", "\[Rule]", "Axis"}], ",", 
   RowBox[{"PlotStyle", "\[Rule]", 
    RowBox[{
     RowBox[{
     "ResourceFunction", "[", 
      "\"\<WolframPhysicsProjectStyleData\>\"", "]"}], "[", 
     RowBox[{"\"\<GenericLinePlot\>\"", ",", "\"\<PlotStyles\>\""}], 
     "]"}]}]}], "]"}]], "Input"]
}, Open  ]]

These results are all for ordinary, deterministic cellular automata. So are there non-deterministic cellular automata? Typically, cellular automata are defined to consistently update every cell at every step. But one can also consider sequential cellular automata, where specific cells are updated at each step—and in this case it is straightforward to define a non-deterministic version, for which things like multiway systems can be constructed. (Note that for a full rulial multiway system, such non-deterministic cellular automata are basically the same as non-deterministic mobile automata, which are close to Turing machines.)

Computation Capabilities and the Structure of Rulial Space

What do the computational capabilities of Turing machines mean for their rulial space? Let’s start with computation universality.

An important fact about deterministic Turing machines is that there are universal ones. Among the 4096 s = 2, k = 2 rules there aren’t any. But as soon one goes to s = 2, k = 3 rules (of which there are 2,985,984) it’s known (thanks to my results in A New Kind of Science, and Alex Smith’s 2007 proof) that there is a universal machine. The rule is:

RulePlot
&#10005

RulePlot[TuringMachine[{596440, 2, 3}]]

Starting from a blank tape, this machine gives

RulePlot
&#10005

RulePlot[TuringMachine[{596440, 2, 3}], {1, {{}, 0}}, 80]

and the corresponding causal graph is:

With
&#10005

With[{t = 2000}, 
 Graph[Rule @@@ 
   TMCausalData[
    TuringMachine[{596440, 2, 3}, {{1, t}, Table[0, 2 t + 1]}, t]], 
  EdgeStyle -> 
   ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", 
    "EdgeStyle"], 
  VertexStyle -> 
   ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph", 
    "VertexStyle"]]]

But what does the existence of a universal machine mean in the rulial multiway system? From any given initial condition, any deterministic Turing machine will trace out some trajectory in the rulial multiway graph. And if a machine is universal it means that by appropriately picking its initial conditions it can be “programmed” to “emulate” any other Turing machine, in the sense that its trajectory will track the trajectory of whatever Turing machine it’s emulating. What does “track” mean? Basically, that there’s some fixed scheme that allows one to go from the states of the universal Turing machine to the states of the machine it’s emulating. The “scheme” will correspond to some translation in the rulial multiway graph, and the requirement is that this translation is somehow always limited. In other words, the trajectory of a universal machine will “flail around” as its starting point (i.e. initial condition) moves in the rulial multiway graph, and this “flailing” will be diverse enough that the trajectory can get close to the trajectory of any given other machine.

If, on the other hand, the machine one’s dealing with isn’t universal, then its trajectory won’t “flail around” enough for this work; the trajectory will in a sense be too constrained to successfully “track” all possible other deterministic Turing machine trajectories.

What about non-deterministic Turing machines? What universality can be interpreted to mean in this case is that given a particular initial condition, the output one wants occurs somewhere on the different paths followed by the non-deterministic Turing machine. (If one’s trying to do a decision problem—as in the computational complexity class NP—then one can arrange to “signal that one’s got an answer” through some feature of the Turing machine state.) In the case of “extreme non-determinism”—as used to construct the rulial multiway graph—computation universality in a sense becomes a statement purely about the structure of the rulial multiway graph. And basically it just requires that the rulial multiway graph is sufficiently connected—which is guaranteed if there’s causal invariance (so there’s nothing like an “event horizon” anywhere).

But does one have to allow “extreme non-determinism” to get universality? With s = 2, k = 3 we know that there’s a purely deterministic Turing machine that achieves it. And my guess is that among s = 2, k = 2 there are “slightly multiway” rules that also do. In a standard deterministic s = 2, k = 2 Turing machine, there are 4 cases of the rule that are each specified to have a unique outcome. But what if even just one of those cases in the rule has two outcomes? The rule is non-deterministic, but it can be thought of as just being the result of specifying 5 defining cases for the rule. And it’s my guess that even this will be sufficient to get universality in the system.

A non-deterministic rule like this will not trace out a single path in the rulial multiway graph. Instead, it’ll give a bundle of paths, with different paths corresponding to different non-deterministic choices. But the story of universality is very similar to the deterministic case: one simply has to ask whether anything in the bundle successfully manages to track the trajectory of the machine one’s emulating.

It’s worth remembering that any given rule won’t typically be following geodesics in rulial space. It’ll be following some more circuitous path (or bundle of paths). But let’s say one has some rule that traces out some trajectory—corresponding to performing some computation. The Principle of Computational Equivalence implies that across different possible rules, there’s a standard “maximum computational sophistication” for these computations, and many rules achieve it. But then the principle also implies that there’s equivalence between these maximally sophisticated computations, in the sense that there’s always a limited computation that translates between them.

Let’s think about this in rulial space. Let’s say we have two rules, starting from the same initial condition. Well, then, at the beginning it’s trivial to translate between the rules. But after t steps, the states reached by these rules can have diverged—making it potentially progressively more difficult to translate between them. A key idea of the rulial multiway graph—and rulial space—is that it lets one talk about both computations and translations between them in uniform ways. Let’s say that the trajectories of two rules have gone a certain distance in rulial space. Then one can look at their divergence, and see how long a “translation computation” one has to do to get from one to the other.

In ordinary spacetime, let’s say a certain time t has elapsed. Then we know that the maximum spatial distance that can have been traversed is c t, where c is the speed of light. In rulial space, there’s something directly analogous: in time t, there’s a maximum rulial distance that can be traversed, which we can call ρ t. But here the Principle of Computational Equivalence makes it a crucial contribution: it implies that throughout rulial space, and in all situations, ρ is fixed. It can take an irreducible amount of computational work to successfully translate from the outcome of one rule to another. But this always scales the same way. There’s in effect one scale of computational irreducibility, and it’s characterized by ρ. Like the constancy of the speed of light uniformly limits physical motion, the constancy of ρ uniformly limits rulial motion.

But let’s say you’re trying to get from one point in rulial space to another. If from your starting point you can follow the path of an irreducible—and effectively universal—computation, then you’ll successfully be able to reach the other point. But if from your starting point you can only follow a reducible computation this won’t generally be true. And what this means is that “pockets of computational reducibility” in rulial space act a bit like black holes in physical space. You can get into them from regions of irreducibility, but you can’t get out of them.

There are probably signs of phenomena like this even in the rulial space for simple Turing machines that we’ve explored here. But there’s considerably more that needs to be worked out to be able to make all the necessary connections.

The Emerging Picture of Rulial Space

There are lots of analogies between physical space, the branchial space, and rulial space. For example, in physical space, there are light cones that govern the maximum rate at which effects can propagate between different parts of physical space. In branchial space, there are entanglement cones that govern the maximum rate of quantum entanglement. And in rulial space, one can think of “emulation cones”, which govern the maximum rate at which one description of behavior can be translated into another.

And when it comes to applying these things to modeling the physical universe, a crucial point is that the observer is necessarily part of the system, governed by the same rules as everything else. And that means that the observer can only be sensitive to certain “appropriately modded-out” aspects of the system. But in actually imagining how an observer “perceives” a system it’s almost always convenient to think about coordinatizing the system—by defining some appropriate foliation. In physical space, this involves foliating the causal graph using reference frames like in relativity. In branchial space, it involves our concept of quantum observation frames. And in rulial space, we can invent another such concept: a rulial description frame, or just a rulial frame.

Different rulial frames in effect correspond to describing the evolution of the universe as operating according to different rules. Causal invariance implies that in the end different rulial frames must give equivalent results. But the specific way one describes the time evolution of the universe will depend on what rulial frame one’s using. In one frame one would be describing the universe in one way; in another frame, another way. And the “story one tells” about how the universe evolves will be different in the different frames.

Much like with superposition in quantum mechanics, there’s probably some notion of regions in rulial space, in which one’s somehow viewing the universe as operating according to “rulially entangled” collections of rules.

But while our original motivation was understanding physics, a lot of what we’re studying about rulial space also applies to purely computational systems. For example, we can think of rulial space even without having any notion of physical space. And we can in effect imagine that rulial space is some kind of map of a space of possible rules for computational systems. (Notice that because of computation universality and the Principle of Computational Equivalence it ultimately doesn’t matter what particular type of rule—Turing machine, cellular automaton, combinator, whatever—is used to “parametrize” rulial space.)

Different places in rulial space in some sense correspond to different rules. Paths at different places in rulial space correspond to evolution according to different rules. So what is the analog of motion in rulial space? In effect it’s having a frame which progressively changes the rule one’s using. If one’s trying to find out what happens in one’s system, it’s fundamentally most efficient to “stick with one rule”. If one progressively changes the rule, one’s going to have to keep “translating back” to the original rule, by somehow emulating this rule with whatever rule one’s reached. And the result of this is there’ll be exactly the analog of relativistic time dilation. Faster motion in rulial space leads to slower progression in time. Of course, to discuss this properly, we really have to talk about the rulial multiway causal graph, etc.

But one thing is clear: motion faster than some maximum speed ρ is impossible. From within the system, you simply can’t keep the correct rulial causal connections if you’re changing your rulial location faster than ρ.

In an abstract study of Turing machines, ρ is just an arbitrary parameter. But in the actual physical universe, it must have a definite value, like the speed of light c, or our maximum entanglement speed ζ. It’s difficult even to estimate what ζ might be. And presumably estimating ρ will be even harder. But it’s interesting to discuss at least how we might start to think about estimating ρ.

The first key observation about rulial space is that in our models, it’s discrete. In other words, there’s a discrete space of possible rules. Or, put another way, theories are quantized, and there’s somehow an elementary distance between theories—or a minimum distance in “theory space” between neighboring theories.

But what units is this distance in? Basically it’s in units of rule—or program—size. Given any program—or rule—we can imagine writing that program out in some language (say in Wolfram Language, or as a program for a particular universal Turing machine, or whatever) And now we can characterize the size of the program by just looking at how many tokens it takes to write the program out.

Of course, with different languages, that number will be different—at the simplest level just like the number of decimal digits necessary to represent a number is different from the number of binary digits, or the length of its representation in terms of primes. But it’s just like measuring a length in feet or meters: even though the numerical value is different, we’re still describing the same length.

It’s important to point out that it’s not enough to just measure things in terms of “raw information content”, or ordinary bits, as discussed in information theory. Rather, we want some kind of measure of “semantic information content”: information content that directly tells us what computation to do.

It’s also important to point out that what we need is different from what’s discussed in algorithmic information theory. Once one has a computation universal system, one can always use it to translate from any one language to any other. And in algorithmic information theory the concept is that one can measure the length of a program up to an additive constant by just expecting to include an “emulation program” that adapts to whatever language one’s measuring the length in. But in the usual formalism of algorithmic information theory one doesn’t worry about how long it’s going to take for the emulation to be done; it’s just a question of whether there’s ultimately enough information to do it.

In our setup, however, it does matter how long the emulation takes, because that process of emulation is actually part of our system. And basically we need the number of steps needed for the emulation to be in some sense bounded by a constant.

So, OK, what does this mean for the value of ρ? Its units are presumably program size per unit time. And so to define its value, we’ll have to say how we’re measuring program size. Perhaps we could imagine we write our rules in the Wolfram Language. Then there should be a definite value of ρ for our universe, measured in Wolfram-Language-tokens per second. If we chose to use (2,3)-Turing-machine-tape-values per year then we’d get a different numerical value. But assuming we used the correct conversions, the value would be the same. (And, yes, there’s all sorts of subtlety about constant-time or not emulation, etc.)

In some sense, we may be able to think of ρ as the ultimate “processor speed for the universe”: how fast tokens in whatever language we’re using are being “interpreted” and actually “executed” to determine the behavior of the universe.

Can we estimate the value of ρ? If our units are Wolfram-Language-tokens per second we could start by imagining just computing in the Wolfram Language some piece of the rulial multiway graph for our models and seeing how many operations it takes. To allow “all possible rules” we’d have to increase the possible left- (and right-) hand sides of our rules to reflect the size of the hypergraph representing the universe at each step. But now we’d need to divide by the “number of parallel threads” in the rulial multiway graph. So we can argue that all we’d be left with is something like (size of spatial hypergraph represented in Wolfram Language) / (elementary time).

So, based on our previous estimates (which I don’t consider anything more than vaguely indicative yet) we might conclude that perhaps:

ρ ~ 10450 Wolfram-Language-tokens/second

The number of “parallel threads” in the rulial multiway graph (the rulial analog of Ξ) might then be related to the number of possible hypergraphs that contain about the number of nodes in the universe, or very roughly (10350)^(10350) ≈ . If we ask the total number of Wolfram Language tokens processed by the universe, there’ll be another factor ~10467, but this “parallelism” will completely dominate, and the result will be about:

Wolfram-Language-tokens

OK, so given a value of ρ, how might we conceivably observe it? Presumably there’s an analog of quantum uncertainty in rulial space, that’s somehow proportional to the value of ρ. It’s not completely clear how this would show up, but one possibility is that it would lead to intrinsic limits on inductive inference. For example, given only a limited observation time, it might be fundamentally impossible to determine beyond a certain (“rulial”) accuracy what rule the universe is following in your description language. There’d be a minimum rate of divergence of behaviors from different rules, associated with the minimum distance between theories—and it would take a certain time to distinguish theories at this rate of divergence.

In our models, just like every causal edge in physical and branchial space is associated with energy, so should every causal edge in rulial space be. In other words, the more processing that happens in a particular part of rulial space, the more physical energy one should consider exists there. And just as with the Einstein equations in physical space, or the Feynman path integral in branchial space, we should expect that the presence of energy in a particular region of rulial space should reflect in a deflection of geodesics there.

Geodesics in rulial space are the shortest paths from one configuration of the universe to another, using whatever sequences of rules are needed. But although that’s somewhat like what’s considered at a theoretical level in non-deterministic computation, it’s not something we’re usually familiar with: we’re used to picking a particular description language and sticking with it. So exactly what the interpretation of deflections of geodesics in rulial space should be isn’t clear.

But there are a few other things we can consider. For example, presumably the universe is expanding in rulial space, perhaps implying that in some sense more descriptions of it are becoming possible over time. What about rulial black holes? As mentioned above, parts of rulial space that correspond to computational reducibility should behave like black holes, where in effect “time stops”. Or, in other words, while in most of the universe time is progressing, and irreducible computation is going on, computational reducibility will cause that process to stop in a rulial black hole.

Presumably geodesics near the rulial black hole will be pulled towards it. Somehow when there’s a description language that leads to computational reducibility, languages near it will tend to also stop being able to successfully describe computationally irreducible processes.

Can we estimate the density of rulial black holes? Let’s consider the Turing machine case. In effect we’re going to want to know what the density of non-universality is among all possible non-deterministic Turing machines. Imagine we emulate all Turing machines using a single universal machine. Then this is effectively equivalent to asking what fraction of initial conditions for that machine lead to reducible behaviors—or, in essence, in the traditional characterization of Turing machines, halt. But the probability across all possible inputs that a universal Turing machine will halt is exactly Greg Chaitin’s Ω. In other words, the density of rulial black holes in rulial space is governed by Ω.

But Ω isn’t just a number like π that we can compute as accurately as we want; it’s noncomputable, in the sense that it can’t be computed to arbitrary accuracy in any finite time by a Turing machine. Now, in a sense it’s not too surprising that the density of rulial black holes is noncomputable—because, given computational irreducibility, to determine for certain whether something is truly a rulial black hole from which nothing can escape one might have to watch it for an unbounded amount of time.

But for me there’s something personally interesting about Greg Chaitin’s Ω showing up in any way in a potential description of anything to do with the universe. You see, I’ve had a nearly 40-year-long debate with Greg about whether the universe is “like π” or “like Ω”. In other words, is it possible to have a rule that will let us compute what the universe does just like we can compute (say, in principle, with a Turing machine) the digits of π? Or will we have to go beyond a Turing machine to describe our universe? I’ve always thought that our universe is “like π”; Greg has thought that it might be “like Ω”. But now it looks as if we might both be right!

In our models, we’re saying that we can compute what the universe does, in principle with a Turing machine. But what we’re now finding out is that in the full rulial space, general limiting statements pull in Ω. In a particular rulial observation frame, we’re able to analyze the universe “like π”. But if we want to know about all possible rulial observation frames—or in a sense the space of all possible descriptions of the universe—we’ll be confronted with Ω.

In our models, the actual operation of the universe, traced in a particular rulial observation frame, is assumed never to correspond to anything computationally more powerful than a Turing machine. But let’s say there was a hypercomputer in our universe. What would it look like? It’d be a place where the effective ρ is infinite—a place where rulial geodesics infinitely diverge—a kind of white hole in rulial space (or perhaps a cosmic event horizon). (We can also think about the hypercomputer as introducing infinite-shortcut paths in the rulial multiway graph which ordinary Turing-machine paths can never “catch up to” and therefore causally affect.)

But given a universe that does hypercomputation, we can then imagine defining a rulial multiway graph for it. And then our universe will show up as a black hole in this higher-level rulial space.

But OK, so if there’s one level of hypercomputer, why not consider all possible levels? In other words, why not define a hyperrulial multiway graph in which the possible rules that are used include both ordinary computational ones, but also hypercomputational ones?

And once we’re dealing with hypercomputational systems, we can just keep going, adding in effect more and more levels of oracles—and progressively ascending the arithmetic hierarchy. (The concept of “intermediate degrees” might be thought to lead to something that isn’t a perfect hierarchy—but I suspect that it’s not robust enough to apply to complete rulial spaces.) Within the hyperrulial multiway graph at a particular level, levels below it will be presumably appear as rulial black holes, while ones above will appear as rulial white holes.

And there’s nothing to keep us only considering finite levels of the arithmetic hierarchy; we can also imagine ascending to transfinite levels, and then just keeping going to higher and higher levels of infinity. Of course, according to our models, none of this is relevant to our particular physical universe. But at a theoretical level, we can still at least to some extent “symbolically describe it”, even in our universe.

]]> https://writings.stephenwolfram.com/2020/06/exploring-rulial-space-the-case-of-turing-machines/feed/ 0
<![CDATA[Event Horizons, Singularities and Other Exotic Spacetime Phenomena]]> https://writings.stephenwolfram.com/2020/05/event-horizons-singularities-and-other-exotic-spacetime-phenomena/ https://writings.stephenwolfram.com/2020/05/event-horizons-singularities-and-other-exotic-spacetime-phenomena/#comments Wed, 20 May 2020 17:58:46 +0000 Stephen Wolfram https://writings.internal.stephenwolfram.com/?p=24554

Wolfram Physics Bulletin

Informal updates and commentary on progress in the Wolfram Physics Project

The Structure and Pathologies of Spacetime

In our models, space emerges as the large-scale limit of our spatial hypergraph, while spacetime effectively emerges as the large-scale limit of the causal graph that represents causal relationships between updating events in the spatial hypergraph. An important result is that (subject to various assumptions) there is a continuum limit in which the emergent spacetime follows Einstein's equations from general relativity.

And given this, it is natural to ask what happens in our models with some of the notable phenomena from general relativity, such as black holes, event horizons and spacetime singularities. I already discussed this to some extent in my technical introduction to our models. My purpose here is to go further, both in more completely understanding the correspondence with general relativity, and in seeing what additional or different phenomena arise in our models.]]>

Wolfram Physics Bulletin

Informal updates and commentary on progress in the Wolfram Physics Project

The Structure and Pathologies of Spacetime

In our models, space emerges as the large-scale limit of our spatial hypergraph, while spacetime effectively emerges as the large-scale limit of the causal graph that represents causal relationships between updating events in the spatial hypergraph. An important result is that (subject to various assumptions) there is a continuum limit in which the emergent spacetime follows Einstein’s equations from general relativity.

And given this, it is natural to ask what happens in our models with some of the notable phenomena from general relativity, such as black holes, event horizons and spacetime singularities. I already discussed this to some extent in my technical introduction to our models. My purpose here is to go further, both in more completely understanding the correspondence with general relativity, and in seeing what additional or different phenomena arise in our models.

It should be said at the outset that even after more than 100 years the whole issue of what weird features of spacetime Einstein’s equations can imply remains a rather confusing subject, that is still very far from completely understood. And in some ways I think our models may help clarify what’s going on. Yes, there’s complexity in taking large-scale limits in our models. But unlike with the Einstein equations, which effectively just tell one to “find a spacetime that satisfies certain constraints defined by the equations”, our models give a direct computational way to determine the structure that is supposed to limit to spacetime.

In what follows, we’ll see that our models can reproduce known implications of Einstein’s equations such as black holes, event horizons and spacetime singularities. But they also suggest the possibility of other, in some ways yet more exotic, spacetime phenomena. Some of these may in fact be things that could be found in the Einstein equations; others require descriptions of spacetime more general than the mathematical structure of general relativity can provide (notably in connection with dimension and topology change).

There’s long been a view that at small enough length scales the Einstein equations will have to be supplemented by some lower-level description of spacetime, presumably connected to quantum mechanics. Our models immediately provide a lower-level representation for spacetime in terms of the discrete structure of the spatial hypergraph and the causal graph—with familiar, continuum spacetime emerging as a large-scale limit, much like continuum fluid behavior emerges as a large-scale limit of molecular dynamics.

And there is already a lot that can be said about the structure and behavior of spacetime in our models just on the basis of the spatial hypergraph and the causal graph. But the models also have the feature that they inexorably involve quantum mechanics as a result of the multiway systems obtained by following different possible sequences of updating events. And this means that we can expect to see how various extreme features of spacetime play out at a quantum level, in particular through the multiway causal graph, which includes not only connections associated with ordinary spacetime, but also with branchtime and the branchial space of quantum entanglements.

I won’t go far in this particular bulletin into the exploration of things like the quantum mechanics of black holes, but we’ll get at least an idea of how these kinds of things can be investigated in our models. In addition to seeing the correspondence with what are now standard questions in mathematical physics, we’ll begin to see some indications of more exotic ideas, like the possibility that in our models particles like electrons may correspond to a kind of generalization of black holes.

What General Relativity Says

Perhaps the most famous prediction of general relativity is the existence of black holes. At a mathematical level, a black hole is characterized by the presence of an event horizon that prevents events occurring inside it from affecting ones outside (though events occurring outside can affect what’s inside).

So how does this actually occur in general relativity? Let’s talk about the simplest nontrivial case: the Schwarzschild solution to Einstein’s equations. Physically, the Schwarzschild solution gives the gravitational field outside a spherically symmetric mass. But there’s a wild thing that happens if the mass is high enough and localized enough: one gets a black hole—with an event horizon. The physical story one can tell is that the escape velocity is larger than the speed of light, so nothing can escape. The mathematical story is more subtle and complicated, and took many years to untangle. But in the end there’s a clear description of the event horizon in terms of the causal structure of spacetime: of what events can causally affect what other ones.

But what about the actual Schwarzschild solution? An important simplifying feature is that it’s a solution to Einstein’s equation in the vacuum, not really in any place where there’s actually mass present. Yes, there’s mass that produces the gravitational field. But the Schwarzschild solution just describes the form of the gravitational field outside of the mass. What about in the black hole case?

In a physical black hole created by a collapsing star, there are presumably remnants of the star inside the event horizon. But that’s not what the Schwarzschild solution describes: it just says there’s vacuum everywhere, with one exception—that at the very center of the black hole there’s some kind of singularity. What can one say about this singularity? The equations imply that right at the singularity the curvature of spacetime is infinite. But there’s also something else. Once any geodesic (corresponding, for example, to the world line of a photon) goes inside the event horizon, it’ll only continue for a limited time, always in effect ending up “at the singularity”. There’s no necessary connection between this kind of geodesic incompleteness and infinite curvature; but in a Schwarzschild black hole both occur.

What is really “at” the center of the Schwarzschild black hole? Is it a place where Einstein’s equations don’t apply? Is it even part of the manifold that corresponds to spacetime? The mathematical structure of general relativity says one starts by setting up a manifold, then one puts a metric on it which satisfies Einstein’s equations. There’s no way the dynamics of the system can change the fundamental structure of the manifold. Yes, its curvature can change, but its dimension cannot, and nor can its topology. So if one wants to say that the point at the center of a Schwarzschild black hole “isn’t part of the manifold”, that’s something one has to put in from the beginning, from outside the Einstein equations.

There’s a certain amount that has been done to classify the kinds of singularities that can occur in general relativity. The singularity in a Schwarzschild black hole is a so-called spacelike one—that essentially “cuts off time” for any geodesic, anywhere in space inside the event horizon.

Discovered 50 years after the Schwarzschild solution is the Kerr solution, representing a rotating black hole. Its structure is much wilder than the Schwarzschild solution. A notable feature is the presence of a timelike singularity—in which time can progress, but space is effectively cut off. (Later, we’ll see that spacelike and timelike singularities have quite simple interpretations in our models.) If the angular momentum is below a critical value, there’s an event horizon (or, actually, two) in a Kerr black hole. But above the critical value, there’s no longer an event horizon, and the singularity is “naked”, and potentially able to affect the rest of the universe.

Like the Schwarzschild solution, the Kerr solution is a mathematical construct that defines a static configuration that a gravitational field can have according to Einstein’s equations when no matter is present (and when the underlying manifold has holes cut out for singularities). There has been a long-running debate about what features of such solutions would survive in more realistic situations, such as matter collapsing to form a black hole.

An early conjecture was the weak cosmic censorship hypothesis which stated that in any realistic situation any singularity must be “hidden” behind an event horizon. This meant for example that Kerr-like black holes formed in practice must have angular momenta below the critical value. Numerical simulations did seem to support that supercritical Kerr-like black holes couldn’t form, but a class of constructions were nevertheless found that could in a certain limit generate at least infinitesimal naked singularities.

Ordinary general relativity is firmly rooted to (3+1)-dimensional spacetime. But it can be generalized to higher dimensions. And in this case one finds new and more complex black-hole-like phenomena—and it seems to be easier for naked singularities at least theoretically to arise.

There are lots of other results from general relativity. One example is Penrose’s singularity theorem, which (with various assumptions) implies that (so long as there is nothing with negative mass AKA gravitational repulsion) as soon as geodesics are trapped within a region (e.g. by an event horizon) they must eventually all converge, and thus form a singularity. (The Hawking singularity theorem is basically a time-reversed version, which implies that there must be a singularity at the beginning of the universe.)

Another idea from general relativity is the “no-hair theorem” (or conjecture), which states that, at least from the outside, a limited number of parameters (such as mass and angular momentum) completely characterize any black hole—at least if it’s static. In other words, black holes are in a sense “perfectly smooth” objects; there aren’t gravitational effects outside the event horizon that reveal “inner complexity”. (Note that this is a classical conjecture; it’s quite likely not to be true when quantum effects are included.)

The Einstein equations are nonlinear partial differential equations, and it’s interesting to compare them with other such equations, such as the Navier–Stokes equations for fluid flow. One feature of the Navier–Stokes equations is that for sufficiently high fluid velocities (larger than the speed of sound) shocks develop that involve discontinuities that cannot be directly described by the equations. And particularly when one gets to hypersonic flow what physically happens is that the approximation that the fluid is continuous—and can be modeled by a partial differential equation—breaks down, and the specific dynamics of the molecules in the fluid start to matter.

Does something similar happen in the Einstein equations? It’s not known whether there can be shocks per se. But it seems likely that to understand things like what appear to be singularities one will have to go “underneath” the Einstein equations—as our models do.

What else can one learn from the fluid dynamics analogy? A notable feature of fluid flow is the phenomenon of fluid turbulence, in which random patterns of flow are ubiquitous. It’s still not clear to what extent turbulence is a true feature of the Navier–Stokes equations, and to what extent it’s associated with sensitive dependence on molecular-scale details. I strongly suspect, though, that like in rule 30 (or in the digits of π) the primary effect is an intrinsic generation of randomness, associated with the phenomenon of computational irreducibility. I’d be amazed if something similar doesn’t happen in Einstein’s equations, but it’ll no doubt be mathematically difficult to establish. Plenty of “randomness” is seen in numerical simulations, but absent a precise underlying computational model it’s very difficult to know if the “randomness” is a true feature of the equations that one is trying to approximate, or is just a feature of the approximation scheme used.

In our models, computational irreducibility and intrinsic randomness generation are ubiquitous. But exactly how such “microscopic” randomness will scale up to “gravitational turbulence” isn’t clear.

One further point, applicable to both fluid flow and gravitation, has to do with computational capability. The Principle of Computational Equivalence strongly suggests that in both cases, sophisticated computation will be ubiquitous. One consequence of this will be computation universality. And in fact it seems likely that this will already be manifest even in such simple cases as the interactions of a few fluid vortices, or just three point masses. The result is that highly complex behavior will be possible.

But that doesn’t mean that—for example in the spacetime case—one can’t summarize certain features of the behavior in simple terms, say by describing overall causal structure, or identifying the presence of an event horizon. However, the presence of underlying computational sophistication does mean that there may be computational limitations in coming up with such summaries. For example, to determine whether a certain system has a certain global causal structure valid for all time may in effect require determining the infinite-time behavior of an irreducible computation, which cannot in general be done by a finite computation, and so must be considered formally undecidable.

Identifying Causal Structure

An event horizon is a feature of the global causal structure of a spacetime—a boundary where events “inside” it can’t affect events (or “observers”) “outside” it. In traditional general relativity, it can be mathematically complicated to establish where there’s an event horizon; it effectively requires proving a theorem about how all possible geodesics will be trapped. (In numerical relativity, one can try to just identify “apparent horizons” where geodesics at least seem to be going in directions where they’ll be trapped, even if one can’t be sure what will happen later.)

But in our models, everything is considerably more explicit. We’re dealing with discrete updating events, occurring at discrete points. And at least in principle we can construct causal graphs that fully describe the causal relationships between all possible events that can occur in spacetime.

Here’s an example of such a causal graph:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {2, 3}} -> {{2, 3}, {3, 1}, {4, 
    1}}, Automatic, 11, "LayeredCausalGraph"]

Remember that the only thing that’s ultimately defined by this causal graph is the causal dependency of events—or in effect the partial ordering of events. Time emerges as an overall inexorable progression of events. Space is associated with the relationship of events in slices defined by foliations of the causal graph.

Any given event can affect any event which it can reach by following directed edges in the causal graph, or, in the language of physics, any event which is in its future light cone. But what happens in the infinite limit of the future light cone of a given event? It could be that that infinite limit effectively covers the whole (“spatial”) universe. Or it could be that it only reaches part of the universe. And in that latter case we can expect that there’ll be an event horizon: a boundary to where the effects of our event can reach.

But how can we map which events have how large an effect—or in a sense what the causal structure of spacetime is? Let’s define what we can call a “causal connection graph” that shows the relationships between the future light cones of events. Given two events, it could be that the limits of their future light cones are exactly the same (both covering the whole universe, or both covering the same part of it). In that case, let’s consider these events “causally equivalent”.

In the causal connection graph, the nodes are collections of causally equivalent events. The edges in the graph are determined by the relationships between the future light cones of these collections of events. Consider two collections A and B. If the limit of the future light cone of A contains the limit of the future light cone of B, then we draw a directed edge in the graph from A to B. And if the limit of the future light cone of A intersects the limit of the future light cone of B (but doesn’t contain it), we draw an undirected edge.

There’ll be a causal connection graph defined for events on any spacelike hypersurface that can be specified as a slice through the causal graph. To find the ultimate causal connection graph, we’d then have to look at the infinite limits of future light cones from events in this spacelike hypersurface. But in practice, we can at least try to approximate this by looking not at the infinite limit of the future light cones, but instead at their limit on some spacelike hypersurface “far enough” in the future. (By the way, this is similar to issues that arise in thinking about “absolute” vs. “apparent” horizons in general relativity.)

OK, so let’s look at the causal graph we had above, and consider four events starting at the top:

HighlightGraph
&#10005

HighlightGraph[
 ResourceFunction[
   "WolframModel"][{{1, 2}, {2, 3}} -> {{2, 3}, {3, 1}, {4, 1}}, 
  Automatic, 9, "LayeredCausalGraph"], Range[4], 
 VertexLabels -> Automatic]

The future light cones for events 1 and 2 contain the whole causal graph. But the future light cones for events 3 and 4 are respectively:

With
&#10005

With[{gg = 
     Graph[ResourceFunction[
        "WolframModel"][{{1, 2}, {2, 3}} -> {{2, 3}, {3, 1}, {4, 1}}, 
       Automatic, 9, "LayeredCausalGraph"]]}, 
   HighlightGraph[
    gg, {Style[Subgraph[gg, VertexOutComponent[gg, #, 10]], Red, 
      Thick]}, ImageSize -> 300]] & /@ {3, 4}

These future light cones are distinct. So if we construct the causal connection graph for the spacelike hypersurface containing events 3 and 4, it’ll just consist of two separated nodes. In effect the universe here has broken into two non-communicating subuniverses. In the language of general relativity, we can say that there’s a cosmological event horizon that separates these two subuniverses, and no information can go in either direction between them.

The signature of this in the causal connection graph is quite straightforward. Looking at the first few levels in the causal graph, one has:

Graph
&#10005

Graph[ResourceFunction[
   "WolframModel"][{{1, 2}, {2, 3}} -> {{2, 3}, {3, 1}, {4, 1}}, 
  Automatic, 6, "LayeredCausalGraph"], VertexLabels -> Automatic]

Computing the causal connection graph for successive levels, one gets:

Table
&#10005

Table[Framed[
  Graph[ResourceFunction["CausalConnectionGraph"][
    ResourceFunction[
       "WolframModel"][{{1, 2}, {2, 3}} -> {{2, 3}, {3, 1}, {4, 1}}, 
      Automatic, #, "LayeredCausalGraph"] &, t0, 12], 
   VertexSize -> .4, VertexLabels -> Automatic, 
   ImageSize -> {150, 30}], FrameStyle -> LightGray], {t0, 1, 5}]

At the first and second levels, no “event horizon” has yet formed, and there’s just a single set of causally equivalent events. But at level 3, there start to be two separate sets of causally equivalent events; an “event horizon” has formed.

So what does the spatial hypergraph “underneath” these look like? Here’s how it evolves (using our standard updating order) for the first few steps:

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, ImageSize -> Tiny] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 2}, {2, 3}} -> {{2, 3}, {3, 1}, {4, 1}}, 
  Automatic, 10, "StatesList"]

It’s very simple compared to the spatial hypergraph for any “real universe”. But it’s still useful as an example for understanding ideas about causal structure. And what we see is that in this tiny “toy universe”, two “lobes” develop, which evolve like two separate subuniverses, with no causal interdependence.

But while there’s no causal interdependence between the “lobes”, the spatial hypergraph is still connected. In our models, however, there’s nothing to say that the spatial hypergraph can’t actually become disconnected—and here’s an example where it does:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 2}, {1, 
    2}}, Automatic, 12, "LayeredCausalGraph"]

Framed
&#10005

Framed[ResourceFunction["WolframModelPlot"][#, ImageSize -> Tiny], 
   FrameStyle -> LightGray] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 2}, {1, 2}}, 
  Automatic, 10, "StatesList"]

What’s the significance of this? If the spatial hypergraph stays connected, then even if two regions are at some point causally disconnected, it still remains possible for them to reconnect (in effect revealing that one did not have a true event horizon). But if the hypergraph is actually disconnected, no such reconnection is ever possible (unless one has a fundamentally nonlocal rule whose left-hand side is itself a disconnected hypergraph, so that it can effectively pick up elements “anywhere in any universe”, regardless of whether there are any existing relations between the elements).

In traditional general relativity, it is certainly possible to have multiple universes, each with their own disconnected manifold representing space. But while the Einstein equations support the formation of event horizons and causal disconnection, they do not support “forming a new universe” with its own topologically distinct disconnected manifold. To get that requires something like our model, with its much greater flexibility in the fundamental description of space. (In the usual mathematical analysis of general relativity, one defines up front the manifold on which one’s operating, though it’s perhaps conceivable that at least in some limit a metric could develop that’s compatible only with a different topology.)

Note that at the level of the causal connection graph, one just sees progressive formation of subuniverses, with cosmological event horizons; there’s no direct trace of disconnection in the spatial hypergraph:

Table
&#10005

Table[Framed[
  Graph[ResourceFunction["CausalConnectionGraph"][
    ResourceFunction[
       "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 2}, {1, 2}}, 
      Automatic, #, "LayeredCausalGraph"] &, t0, 12], 
   VertexSize -> .4, ImageSize -> {150, 30}], 
  FrameStyle -> LightGray], {t0, 1, 7}]

Black-Hole-Like Event Horizons

The type of causal disconnection that we’ve discussed so far is bidirectional: information can’t propagate in either direction across the event horizon. But for black holes, the story is different, basically with effects able to flow into the black hole, but not out.

Here’s a very simple example of something like this in our models:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 
    2}}, Automatic, 12, "LayeredCausalGraph"]

In the “universe at large”, represented rather trivially here by the outermost vertical edges, information can propagate back and forth. But if it goes into the “black hole” at the center, it never comes out again.

Here’s the rule that’s being used

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 2}}]]

and here’s what’s going on in the spatial hypergraph:

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, ImageSize -> Tiny] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 2}}, 
  Automatic, 10, "StatesList"]

It’s a bit easier to see what’s happening if we look at every single event in the spatial hypergraph:

Show
&#10005

Show[#, ImageSize -> {60, 30}] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 2}}, 
  Automatic, 14, "EventsStatesPlotsList"]

And basically what we see is that events propagate causal effects in both directions on the “ring” that represents the “universe at large”, but any causal effect on the “prong” only goes in one direction, making it correspond to a very simple analog of a black hole.

It is important to note that the black hole “doesn’t form” immediately. The “universe” has to “expand” for a couple of steps before one can distinguish a “black hole” event horizon.

Given the causal graph

ResourceFunction
&#10005

ResourceFunction[
   "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 2}}, 
  Automatic, 7]["LayeredCausalGraph", 
 VertexLabels -> Placed[Automatic, {After, Above}]]

one can construct a causal connection graph. Looking at this on successive steps one gets:

Table
&#10005

Table[Framed[Graph[ResourceFunction["CausalConnectionGraph"]
    [ResourceFunction[
       "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 2}}, 
      Automatic, #, "LayeredCausalGraph"] &, t0, 12], 
   VertexSize -> .1, VertexLabels -> Automatic, 
   ImageSize -> {150, 30}], FrameStyle -> LightGray], {t0, 1, 7}]

For the first three steps, there’s only one set of causally equivalent events. But by step 4, a second set forms. And there’s now a one-way causal connection between the first set of causally equivalent events and the second: in other words, a “black-hole-like” event horizon has formed.

Let’s look at a slightly more complicated case, though still with a very simple rule:

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {3, 4}}]]

The causal graph in this case is:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {3, 
    4}}, Automatic, 25, "LayeredCausalGraph"]

Looking at the causal connection graph for successive steps, we see that after a little while a “black hole event horizon” forms:

Table
&#10005

Table[Framed[
  Graph[ResourceFunction["CausalConnectionGraph"][
    ResourceFunction[
       "WolframModel"][{{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {3, 4}}, 
      Automatic, #, "LayeredCausalGraph"] &, t0, 20], 
   ImageSize -> {120, 30}, VertexSize -> .2], 
  FrameStyle -> LightGray], {t0, 2, 12}]

If we look at forward light cones of different events, we see that some “fill the whole universe”, but others stay localized to the region on the left. One can think of the first set as being the light cones of events that are in the “universe at large”; the second set are the light cones of events that are “trapped inside a black hole”:

With
&#10005

With[{gg = 
     Graph[ResourceFunction[
        "WolframModel"][{{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {3, 4}}, 
       Automatic, 24, "LayeredCausalGraph"]]}, 
   HighlightGraph[
    gg, {Style[Subgraph[gg, VertexOutComponent[gg, #, 20]], Red, 
      Thick]}, ImageSize -> 300]] & /@ {12, 13}

Events trapped inside the black hole cannot affect events outside. But events outside can affect events inside, with events on the boundary in effect representing the process of things falling into the black hole. Note that since energy (and mass) are measured by the flux of causal edges through spacelike hypersurfaces, the black hole shown here effectively gains mass through events that deliver things into the black hole. (Our complete universe is also expanding, so there’s no overall energy conservation to be seen here.)

What does the underlying spatial hypergraph look like in this case? Once again, it’s quite simple:

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, ImageSize -> Tiny] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {3, 4}}, 
  Automatic, 14, "StatesList"]

So where is the black hole? We can number the events in the causal graph:

Graph
&#10005

Graph[ResourceFunction[
   "WolframModel"][{{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {3, 4}}, 
  Automatic, 13, "LayeredCausalGraph"], VertexLabels -> Automatic]

Then we can match these up with events in the spatial hypergraph:

Row
&#10005

Row[Flatten[
    Riffle[#, {Spacer[10], Text[Style[#, Small]], Spacer[10]} & /@ 
      Range[Length[#] - 1]]] &[
  Show[#, ImageSize -> {60, 30}] & /@ 
   ResourceFunction[
     "WolframModel"][{{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {3, 4}}, 
    Automatic, 13, "EventsStatesPlotsList"]]]

The basic conclusion is that the “main circle” acts like a black hole, with the smaller “handle” being like the “rest of the universe”.

Here’s another, slightly less trivial example:

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 2, 3}, {4, 5, 3}} -> {{2, 6, 4}, {6, 1, 
     2}, {4, 2, 1}}]]

The causal graph in this case is:

Graph
&#10005

Graph[ResourceFunction[
   "WolframModel"][{{{1, 2, 3}, {4, 5, 3}} -> {{2, 6, 4}, {6, 1, 
      2}, {4, 2, 1}}}, Automatic, 20, "LayeredCausalGraph"], 
 AspectRatio -> 1/2]

Some initial events have light cones which cover the whole space; others always avoid the “spine” on the left, which behaves like a black hole:

With
&#10005

With[{gg = 
     Graph[ResourceFunction[
        "WolframModel"][{{{1, 2, 3}, {4, 5, 3}} -> {{2, 6, 4}, {6, 1, 
           2}, {4, 2, 1}}}, Automatic, 18, "LayeredCausalGraph"]]}, 
   HighlightGraph[
    gg, {Style[Subgraph[gg, VertexOutComponent[gg, #, 10]], Red, 
      Thick]}, ImageSize -> 300, AspectRatio -> 1/2]] & /@ {8, 10}

Here’s the underlying spatial hypergraph:

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, ImageSize -> Tiny] & /@ 
 ResourceFunction[
   "WolframModel"][{{{1, 2, 3}, {4, 5, 3}} -> {{2, 6, 4}, {6, 1, 
      2}, {4, 2, 1}}}, Automatic, 12, "StatesList"]

Comparing the list of events

Row
&#10005

Row[Flatten[
    Riffle[#, {Spacer[10], Text[Style[#, Small]], Spacer[10]} & /@ 
      Range[Length[#] - 1]]] &[
  Show[#, ImageSize -> {60, 30}] & /@ 
   ResourceFunction[
     "WolframModel"][{{{1, 2, 3}, {4, 5, 3}} -> {{2, 6, 4}, {6, 1, 
        2}, {4, 2, 1}}}, Automatic, 8, "EventsStatesPlotsList"]]]

with the annotated causal graph

Graph
&#10005

Graph[ResourceFunction[
   "WolframModel"][{{{1, 2, 3}, {4, 5, 3}} -> {{2, 6, 4}, {6, 1, 
      2}, {4, 2, 1}}}, Automatic, 9, "LayeredCausalGraph"], 
 AspectRatio -> 1/2, VertexLabels -> Automatic]

we see that again the “black hole” is associated with a definite part of the spatial hypergraph.

Spacelike and Timelike Singularities

Disconnection is one kind of “pathology” that can occur in our models. Another is termination: a configuration can be reached in which the rules no longer apply, and “time stops”. (In the language of term rewriting systems, one can say in such a case that a “normal form” has been reached.)

Here is an example of the spatial hypergraph for a rule in which this happens:

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, "MaxImageSize" -> 80] & /@ 
 ResourceFunction[
   "WolframModel"][{{x, x}, {y, x}} -> {{y, y}, {y, z}, {y, z}, {z, 
     x}, {w, z}}, Automatic, 20, "StatesList"]

The corresponding causal graph is:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{x, x}, {y, x}} -> {{y, y}, {y, z}, {y, z}, {z, 
    x}, {w, z}}, Automatic, 15, "LayeredCausalGraph"]

And given this causal graph, we can see that the future light cone of any event winds up “compressing down” to just the single final event—after which “time stops”.

Is there an analog of this in ordinary general relativity? Yes, it’s just a spacelike singularity—like what occurs in the Schwarzschild solution. In the Schwarzschild solution the spacelike singularity is in the future of events inside the event horizon; here it’s in the future of the “whole universe”. But it’s exactly the same idea. The future of anything that happens—or any geodesic—inevitably winds up in the “dead end” of the causal graph, at which “time stops”.

Here’s a slightly more complicated example that again involves termination, but now with two distinct “final events”:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{x, y, z}, {x, u, v}} -> {{y, x, w}, {w, u, s}, {v,
     z, u}}, Automatic, 25, "LayeredCausalGraph"]

Like in a cosmological event horizon, different collections of events in effect lead to different branches of future light cones—though in this case whichever branch is followed, “time eventually stops”.

With
&#10005

With[{gg = 
     Graph[ResourceFunction[
        "WolframModel"][{{x, y, z}, {x, u, v}} -> {{y, x, w}, {w, u, 
          s}, {v, z, u}}, Automatic, 20, "LayeredCausalGraph"]]}, 
   HighlightGraph[
    gg, {Style[Subgraph[gg, VertexOutComponent[gg, #, 10]], Red, 
      Thick]}, ImageSize -> 120]] & /@ {13, 16}

The causal connection graphs in this case basically just indicate the formation of a cosmological event horizon:

Table
&#10005

Table[Framed[
  Graph[ResourceFunction["CausalConnectionGraph"][
    ResourceFunction[
       "WolframModel"][{{x, y, z}, {x, u, v}} -> {{y, x, w}, {w, u, 
         s}, {v, z, u}}, Automatic, #, "LayeredCausalGraph"] &, t0, 
    6], ImageSize -> {120, 30}, VertexSize -> .2], 
  FrameStyle -> LightGray], {t0, 2, 6}]

But now each branch does not lead to a “full subuniverse”; instead they lead to two subuniverses that each end up in a spacelike singularity at which time stops.

By the way, consider a “typical” causal graph like:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {2, 3}} -> {{2, 1}, {2, 3}, {4, 
    1}}, Automatic, 40, "LayeredCausalGraph"]

Starting from any event in this causal graph, its future light cone will presumably eventually “cover the whole universe”. But what about its past light cone? Wherever we start, the past light cone will eventually “compress down” to the single initialization event at the top of our causal graph. In other words—just like in standard general relativity—the beginning of the universe also behaves like a spacelike singularity.

What about timelike singularities? What is their analog in our models? Remember that a spacelike singularity effectively corresponds to “time stopping”. Well, a timelike singularity presumably corresponds to “space stopping”, but time continuing. Here’s an example:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {2, 3}} -> {{2, 3}, {3, 4}, {5, 
    1}}, Automatic, 12, "LayeredCausalGraph"]

In this example, the future light cones of all events concentrate down onto two separated “tracks”, in each of which there is an inexorable progression from one event to the next, with “no room for any space”.

Here’s a minimal version of the same kind of behavior, for the rule:

{{x, x}} {{x, x}, {x, y}}

Show
&#10005

Show[ResourceFunction[
   "WolframModel"][{{x, x}} -> {{x, x}, {x, y}}, {{1, 1}}, 4, 
  "LayeredCausalGraph"], ImageSize -> {Automatic, 300}]

Unsurprisingly, its spatial hypergraph does not succeed in “growing space”:

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, ImageSize -> 60] & /@ 
 ResourceFunction[
   "WolframModel"][{{x, x}} -> {{x, x}, {x, y}}, {{1, 1}}, 8, 
  "StatesList"]

If one starts looking at other rules, one quickly sees all sorts of strange behavior. The almost trivial unary rule

{{x}} {{x}, {x}}

effectively gives a whole tree of timelike singularities:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{x}} -> {{x}, {x}}, {{1}}, 6, "LayeredCausalGraph"]

Here are a few other ways that collections of timelike singularities can be produced:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {3, 
    1}}, Automatic, 20, "LayeredCausalGraph"]

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 4}, {3, 4}, {2, 
    1}}, Automatic, 20, "LayeredCausalGraph"]

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {1, 3}} -> {{2, 2}, {3, 2}, {1, 
    4}}, Automatic, 30, "LayeredCausalGraph"]

Notice that for example in the last case only some events don’t lead to timelike singularities. A bit like in a Kerr black hole, it’s both possible to avoid the singularity, and be trapped in it.

But let’s go back to spacelike singularities. We’ve seen examples where “time stops” for the whole universe. But what about for just some events? Here’s a simple example:

FindDeadEnds
&#10005

FindDeadEnds[fun_, t_Integer] := 
  Intersection[Flatten[Position[VertexOutDegree[fun[t + 1]], 0]], 
   Flatten[Position[VertexOutDegree[fun[t]], 0]]];
Function[ru, 
  TimeConstrained[
   HighlightGraph[
    ResourceFunction["WolframModel"][ru, Automatic, 15, 
     "LayeredCausalGraph"], 
    Style[#, Red] & /@ 
     FindDeadEnds[
      ResourceFunction["WolframModel"][ru, Automatic, #, 
        "LayeredCausalGraph"] &, 25], VertexSize -> .3, 
    ImageSize -> {Automatic, 300}], 
   5]][{{1, 2}, {2, 3}} -> {{2, 2}, {1, 4}, {3, 4}}]

For most events, the future light cone continues forever. But that’s not true for the highlighted events. Each of these events is a “dead end”, for which “time stops”.

In this case, the dead ends are associated with spatial disconnections, but this does not need to be true:

Framed
&#10005

Framed[ResourceFunction["WolframModelPlot"][#, "MaxImageSize" -> 60], 
   FrameStyle -> LightGray] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 2}, {2, 3}} -> {{2, 2}, {1, 4}, {3, 4}}, 
  Automatic, 10, "StatesList"]

Here is a slightly more complicated case:

Function
&#10005

Function[ru, 
  TimeConstrained[
   HighlightGraph[
    ResourceFunction["WolframModel"][ru, Automatic, 17, 
     "LayeredCausalGraph"], 
    Style[#, Red] & /@ 
     FindDeadEnds[
      ResourceFunction["WolframModel"][ru, Automatic, #, 
        "LayeredCausalGraph"] &, 25], VertexSize -> .4, 
    ImageSize -> {Automatic, 300}], 
   5]][{{1, 2}, {3, 2}} -> {{1, 1}, {1, 3}, {4, 2}}]

Again, though, these are “single-event” dead ends, in the sense that after those particular events, time stops. But predecessors of these events still “have a choice”: their future light cones include both the spacelike singularity, and other parts of the causal graph.

It is perfectly possible to have a combination of spacelike and timelike singularities. On the left here is a series of spacelike singularities, while on the right are timelike singularities, effectively all separated by cosmological event horizons:

Function
&#10005

Function[ru, 
  TimeConstrained[
   HighlightGraph[
    ResourceFunction["WolframModel"][ru, Automatic, 18, 
     "LayeredCausalGraph"], 
    Style[#, Red] & /@ 
     FindDeadEnds[
      ResourceFunction["WolframModel"][ru, Automatic, #, 
        "LayeredCausalGraph"] &, 25], VertexSize -> .5, 
    ImageSize -> {Automatic, 300}], 
   5]][{{1, 2}, {3, 2}} -> {{1, 3}, {3, 4}, {4, 1}}]

Recognizing when there’s actually a genuine spacelike singularity can be difficult. Consider the case:

Function
&#10005

Function[ru, 
  TimeConstrained[
   HighlightGraph[
    ResourceFunction["WolframModel"][ru, Automatic, 18, 
     "LayeredCausalGraph"], 
    Style[#, Red] & /@ 
     FindDeadEnds[
      ResourceFunction["WolframModel"][ru, Automatic, #, 
        "LayeredCausalGraph"] &, 25], VertexSize -> .6, 
    ImageSize -> {Automatic, 300}], 
   5]][{{1, 2}, {1, 3}} -> {{2, 4}, {4, 3}, {3, 1}}]

At first it seems as if some of the events in the last few steps we have generated have no successors. But continuing for a few more steps, we find out that these ones do—though now there are new events that seem not to:

Function
&#10005

Function[ru, 
  TimeConstrained[
   HighlightGraph[
    ResourceFunction["WolframModel"][ru, Automatic, 25, 
     "LayeredCausalGraph"], 
    Style[#, Red] & /@ 
     FindDeadEnds[
      ResourceFunction["WolframModel"][ru, Automatic, #, 
        "LayeredCausalGraph"] &, 30], VertexSize -> 1, 
    ImageSize -> {Automatic, 300}], 
   5]][{{1, 2}, {1, 3}} -> {{2, 4}, {4, 3}, {3, 1}}]

Plotting the event numbers for “potential spacelike singularities” against the number of steps of evolution generated, we can see that most events only remain “candidates” for a few steps:

ListPlot
&#10005

ListPlot[Catenate[
  Table[{t, #} & /@ 
    FindDeadEnds[
     ResourceFunction[
        "WolframModel"][{{1, 2}, {1, 3}} -> {{2, 4}, {4, 3}, {3, 1}}, 
       Automatic, #, "LayeredCausalGraph"] &, t], {t, 20}]], 
 Frame -> True]

In the limit of arbitrarily many steps, will any spacelike-singularity events survive? It doesn’t look likely, but it is hard to tell for sure. And this is exactly one of those cases where the general problem is likely to be undecidable: there is no finite computation which can guarantee to give the result.

One feature of all these examples is that they all involve spacelike singularities that affect just single events. At the beginning we also saw examples where “all the events in the universe” eventually wind up at a spacelike singularity. But what about a case that’s more analogous to a Schwarzschild black hole, where a collection of events inside an event horizon wind up at a spacelike singularity, but ones “outside” do not?

I haven’t explicitly found an example where this happens, but I’m confident that one exists, perhaps with slightly more complicated initial conditions than I’ve been using here.

In ordinary general relativity, Penrose’s singularity theorem implies that as soon as there is a trapped surface from which geodesics cannot escape, the geodesics will inevitably reach a singularity. This theorem is known to apply in any number of dimensions (with codimension-2 trapped hypersurfaces). And in our models, it might make one think that as soon as there is a black-hole-like event horizon, there must be a singularity of the kind we have discussed.

But what about a case like the following one we discussed above?

With
&#10005

With[{gg = 
     Graph[ResourceFunction[
        "WolframModel"][{{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {3, 4}}, 
       Automatic, 24, "LayeredCausalGraph"]]}, 
   HighlightGraph[
    gg, {Style[Subgraph[gg, VertexOutComponent[gg, #, 20]], Red, 
      Thick]}, ImageSize -> 300]] &@13

There is a “trapped region” in the causal graph, but no sign of a singularity. There seem to be a couple of (not-mutually-exclusive) possibilities for what is going on here. The first is that there is in a sense so much “overall expansion in the universe” and lack of energy conservation (reflected in an increasing flux of causal edges) that the energy conditions in the theorem effectively do not apply. A second possibility is that what we’re seeing is “another universe” forming inside the event horizon. In the Kerr solution, the (probably unrealistic and fragile) mathematics implies that it is in principle possible to “go through” the singularity and emerge into “another universe” that is just as infinite as ours. Perhaps what we are seeing here is a similar phenomenon.

The Distribution of Causal Structures

What kinds of causal structures are possible in our systems? To start answering this, we can explicitly look at all 4702 possible 22  32 rules. We have to pick how many steps after the “beginning of the universe” we want to consider; we’ll start with 5. We also have to pick how many steps we want to use to check causal connectivity; we’ll start with 10. Then here are the possible causal connection graphs that occur, together with how many times they occur:

allrules32
&#10005

allrules32 = {{{1, 1}, {1, 1}} -> {{1, 1}, {1, 1}, {1, 1}}, {{1, 1}, {
    1, 1}} -> {{1, 1}, {1, 1}, {1, 2}}, {{1, 1}, {1, 1}} -> {{1, 1}, {
    1, 1}, {2, 1}}, {{1, 1}, {1, 1}} -> {{1, 1}, {1, 2}, {1, 2}}, {{1,
     1}, {1, 1}} -> {{1, 1}, {1, 2}, {2, 1}}, {{1, 1}, {1, 1}} -> {{1,
     1}, {1, 2}, {2, 2}}, {{1, 1}, {1, 1}} -> {{1, 1}, {1, 2}, {1, 
    3}}, {{1, 1}, {1, 1}} -> {{1, 1}, {1, 2}, {2, 3}}, {{1, 1}, {1, 
    1}} -> {{1, 1}, {1, 2}, {3, 1}}, {{1, 1}, {1, 1}} -> {{1, 1}, {1, 
    2}, {3, 2}}, {{1, 1}, {1, 1}} -> {{1, 1}, {2, 1}, {2, 1}}, {{1, 
    1}, {1, 1}} -> {{1, 1}, {2, 1}, {2, 3}}, {{1, 1}, {1, 1}} -> {{1, 
    1}, {2, 1}, {3, 1}}, {{1, 1}, {1, 1}} -> {{1, 1}, {2, 1}, {3, 
    2}}, {{1, 1}, {1, 1}} -> {{1, 2}, {1, 2}, {1, 2}}, {{1, 1}, {1, 
    1}} -> {{1, 2}, {1, 2}, {2, 1}}, {{1, 1}, {1, 1}} -> {{1, 2}, {1, 
    2}, {1, 3}}, {{1, 1}, {1, 1}} -> {{1, 2}, {1, 2}, {2, 3}}, {{1, 
    1}, {1, 1}} -> {{1, 2}, {2, 1}, {1, 3}}, {{1, 1}, {1, 1}} -> {{1, 
    2}, {1, 2}, {3, 1}}, {{1, 1}, {1, 1}} -> {{1, 2}, {1, 2}, {3, 
    2}}, {{1, 1}, {1, 1}} -> {{1, 2}, {2, 1}, {3, 1}}, {{1, 1}, {1, 
    1}} -> {{1, 2}, {1, 3}, {2, 3}}, {{1, 1}, {1, 1}} -> {{1, 2}, {2, 
    3}, {3, 1}}, {{1, 1}, {1, 1}} -> {{1, 2}, {1, 3}, {1, 4}}, {{1, 
    1}, {1, 1}} -> {{1, 2}, {1, 3}, {2, 4}}, {{1, 1}, {1, 1}} -> {{1, 
    2}, {2, 3}, {3, 4}}, {{1, 1}, {1, 1}} -> {{1, 2}, {1, 3}, {4, 
    1}}, {{1, 1}, {1, 1}} -> {{1, 2}, {1, 3}, {4, 2}}, {{1, 1}, {1, 
    1}} -> {{1, 2}, {2, 3}, {4, 2}}, {{1, 1}, {1, 1}} -> {{1, 2}, {2, 
    3}, {4, 3}}, {{1, 1}, {1, 1}} -> {{1, 2}, {3, 2}, {4, 2}}, {{1, 
    1}, {1, 1}} -> {{2, 1}, {2, 1}, {1, 2}}, {{1, 1}, {1, 1}} -> {{2, 
    1}, {2, 1}, {2, 1}}, {{1, 1}, {1, 1}} -> {{2, 2}, {1, 2}, {1, 
    2}}, {{1, 1}, {1, 1}} -> {{2, 2}, {2, 1}, {1, 1}}, {{1, 1}, {1, 
    1}} -> {{2, 2}, {2, 1}, {1, 2}}, {{1, 1}, {1, 1}} -> {{2, 2}, {2, 
    1}, {2, 1}}, {{1, 1}, {1, 1}} -> {{2, 2}, {2, 2}, {1, 2}}, {{1, 
    1}, {1, 1}} -> {{2, 2}, {2, 2}, {2, 1}}, {{1, 1}, {1, 1}} -> {{2, 
    1}, {1, 2}, {2, 3}}, {{1, 1}, {1, 1}} -> {{2, 1}, {2, 1}, {1, 
    3}}, {{1, 1}, {1, 1}} -> {{2, 1}, {2, 1}, {2, 3}}, {{1, 1}, {1, 
    1}} -> {{2, 2}, {1, 2}, {1, 3}}, {{1, 1}, {1, 1}} -> {{2, 2}, {2, 
    1}, {1, 3}}, {{1, 1}, {1, 1}} -> {{2, 2}, {2, 1}, {2, 3}}, {{1, 
    1}, {1, 1}} -> {{2, 1}, {1, 2}, {3, 2}}, {{1, 1}, {1, 1}} -> {{2, 
    1}, {2, 1}, {3, 1}}, {{1, 1}, {1, 1}} -> {{2, 1}, {2, 1}, {3, 
    2}}, {{1, 1}, {1, 1}} -> {{2, 2}, {1, 2}, {3, 1}}, {{1, 1}, {1, 
    1}} -> {{2, 2}, {1, 2}, {3, 2}}, {{1, 1}, {1, 1}} -> {{2, 2}, {2, 
    1}, {3, 1}}, {{1, 1}, {1, 1}} -> {{2, 2}, {2, 1}, {3, 2}}, {{1, 
    1}, {1, 1}} -> {{2, 1}, {2, 3}, {1, 3}}, {{1, 1}, {1, 1}} -> {{2, 
    2}, {2, 3}, {1, 2}}, {{1, 1}, {1, 1}} -> {{2, 2}, {2, 3}, {1, 
    3}}, {{1, 1}, {1, 1}} -> {{2, 2}, {2, 3}, {3, 1}}, {{1, 1}, {1, 
    1}} -> {{2, 1}, {1, 3}, {3, 4}}, {{1, 1}, {1, 1}} -> {{2, 1}, {2, 
    3}, {1, 4}}, {{1, 1}, {1, 1}} -> {{2, 1}, {2, 3}, {2, 4}}, {{1, 
    1}, {1, 1}} -> {{2, 1}, {1, 3}, {4, 1}}, {{1, 1}, {1, 1}} -> {{2, 
    1}, {1, 3}, {4, 3}}, {{1, 1}, {1, 1}} -> {{2, 1}, {2, 3}, {4, 
    1}}, {{1, 1}, {1, 1}} -> {{2, 1}, {2, 3}, {4, 2}}, {{1, 1}, {1, 
    1}} -> {{2, 2}, {3, 2}, {1, 3}}, {{1, 1}, {1, 1}} -> {{2, 2}, {3, 
    2}, {3, 1}}, {{1, 1}, {1, 1}} -> {{2, 1}, {3, 1}, {4, 1}}, {{1, 
    1}, {1, 1}} -> {{2, 3}, {2, 1}, {3, 1}}, {{1, 1}, {1, 1}} -> {{2, 
    3}, {2, 3}, {1, 2}}, {{1, 1}, {1, 1}} -> {{2, 3}, {2, 3}, {1, 
    3}}, {{1, 1}, {1, 1}} -> {{2, 3}, {2, 3}, {2, 1}}, {{1, 1}, {1, 
    1}} -> {{2, 3}, {2, 3}, {3, 1}}, {{1, 1}, {1, 1}} -> {{2, 3}, {3, 
    2}, {1, 2}}, {{1, 1}, {1, 1}} -> {{2, 3}, {3, 2}, {2, 1}}, {{1, 
    1}, {1, 1}} -> {{2, 3}, {2, 1}, {3, 4}}, {{1, 1}, {1, 1}} -> {{2, 
    3}, {3, 1}, {1, 4}}, {{1, 1}, {1, 1}} -> {{2, 3}, {2, 1}, {4, 
    3}}, {{1, 1}, {1, 1}} -> {{2, 3}, {3, 1}, {4, 1}}, {{1, 1}, {1, 
    1}} -> {{2, 3}, {3, 1}, {4, 3}}, {{1, 1}, {1, 1}} -> {{2, 3}, {2, 
    4}, {1, 2}}, {{1, 1}, {1, 1}} -> {{2, 3}, {2, 4}, {1, 3}}, {{1, 
    1}, {1, 1}} -> {{2, 3}, {2, 4}, {3, 1}}, {{1, 1}, {1, 1}} -> {{2, 
    3}, {3, 4}, {1, 4}}, {{1, 1}, {1, 1}} -> {{2, 3}, {3, 4}, {4, 
    1}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 1}, {1, 1}}, {{1, 1}, {1, 
    2}} -> {{1, 1}, {1, 1}, {1, 2}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 
    1}, {2, 1}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 1}, {2, 2}}, {{1, 
    1}, {1, 2}} -> {{1, 1}, {1, 2}, {1, 2}}, {{1, 1}, {1, 2}} -> {{1, 
    1}, {1, 2}, {2, 1}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 2}, {2, 
    2}}, {{1, 1}, {1, 2}} -> {{1, 1}, {2, 1}, {2, 1}}, {{1, 1}, {1, 
    2}} -> {{1, 2}, {1, 2}, {1, 2}}, {{1, 1}, {1, 2}} -> {{1, 2}, {1, 
    2}, {2, 1}}, {{1, 1}, {1, 2}} -> {{2, 1}, {2, 1}, {1, 2}}, {{1, 
    1}, {1, 2}} -> {{2, 1}, {2, 1}, {2, 1}}, {{1, 1}, {1, 2}} -> {{2, 
    2}, {1, 2}, {1, 2}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 1}, {1, 
    1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 1}, {1, 2}}, {{1, 1}, {1, 
    2}} -> {{2, 2}, {2, 1}, {2, 1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 
    2}, {1, 1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 2}, {1, 2}}, {{1, 
    1}, {1, 2}} -> {{2, 2}, {2, 2}, {2, 1}}, {{1, 1}, {1, 2}} -> {{2, 
    2}, {2, 2}, {2, 2}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 1}, {1, 
    3}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 1}, {2, 3}}, {{1, 1}, {1, 
    2}} -> {{1, 1}, {1, 2}, {1, 3}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 
    2}, {2, 3}}, {{1, 1}, {1, 2}} -> {{1, 1}, {2, 1}, {2, 3}}, {{1, 
    1}, {1, 2}} -> {{1, 2}, {1, 2}, {1, 3}}, {{1, 1}, {1, 2}} -> {{1, 
    2}, {1, 2}, {2, 3}}, {{1, 1}, {1, 2}} -> {{1, 2}, {2, 1}, {1, 
    3}}, {{1, 1}, {1, 2}} -> {{2, 1}, {1, 2}, {2, 3}}, {{1, 1}, {1, 
    2}} -> {{2, 1}, {2, 1}, {1, 3}}, {{1, 1}, {1, 2}} -> {{2, 1}, {2, 
    1}, {2, 3}}, {{1, 1}, {1, 2}} -> {{2, 2}, {1, 2}, {1, 3}}, {{1, 
    1}, {1, 2}} -> {{2, 2}, {2, 1}, {1, 3}}, {{1, 1}, {1, 2}} -> {{2, 
    2}, {2, 1}, {2, 3}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 2}, {1, 
    3}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 2}, {2, 3}}, {{1, 1}, {1, 
    2}} -> {{1, 1}, {1, 1}, {3, 1}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 
    1}, {3, 2}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 2}, {3, 1}}, {{1, 
    1}, {1, 2}} -> {{1, 1}, {1, 2}, {3, 2}}, {{1, 1}, {1, 2}} -> {{1, 
    1}, {2, 1}, {3, 1}}, {{1, 1}, {1, 2}} -> {{1, 1}, {2, 1}, {3, 
    2}}, {{1, 1}, {1, 2}} -> {{1, 2}, {1, 2}, {3, 1}}, {{1, 1}, {1, 
    2}} -> {{1, 2}, {1, 2}, {3, 2}}, {{1, 1}, {1, 2}} -> {{1, 2}, {2, 
    1}, {3, 1}}, {{1, 1}, {1, 2}} -> {{2, 1}, {1, 2}, {3, 2}}, {{1, 
    1}, {1, 2}} -> {{2, 1}, {2, 1}, {3, 1}}, {{1, 1}, {1, 2}} -> {{2, 
    1}, {2, 1}, {3, 2}}, {{1, 1}, {1, 2}} -> {{2, 2}, {1, 2}, {3, 
    1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {1, 2}, {3, 2}}, {{1, 1}, {1, 
    2}} -> {{2, 2}, {2, 1}, {3, 1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 
    1}, {3, 2}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 2}, {3, 1}}, {{1, 
    1}, {1, 2}} -> {{2, 2}, {2, 2}, {3, 2}}, {{1, 1}, {1, 2}} -> {{1, 
    1}, {1, 3}, {1, 3}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 3}, {2, 
    1}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 3}, {2, 2}}, {{1, 1}, {1, 
    2}} -> {{1, 1}, {1, 3}, {2, 3}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 
    3}, {3, 1}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 3}, {3, 2}}, {{1, 
    1}, {1, 2}} -> {{1, 1}, {1, 3}, {3, 3}}, {{1, 1}, {1, 2}} -> {{1, 
    1}, {2, 3}, {2, 3}}, {{1, 1}, {1, 2}} -> {{1, 1}, {2, 3}, {3, 
    2}}, {{1, 1}, {1, 2}} -> {{1, 2}, {1, 3}, {2, 3}}, {{1, 1}, {1, 
    2}} -> {{1, 2}, {2, 3}, {3, 1}}, {{1, 1}, {1, 2}} -> {{2, 1}, {2, 
    3}, {1, 3}}, {{1, 1}, {1, 2}} -> {{2, 2}, {1, 3}, {1, 3}}, {{1, 
    1}, {1, 2}} -> {{2, 2}, {1, 3}, {3, 1}}, {{1, 1}, {1, 2}} -> {{2, 
    2}, {2, 3}, {1, 1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 3}, {1, 
    2}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 3}, {1, 3}}, {{1, 1}, {1, 
    2}} -> {{2, 2}, {2, 3}, {2, 3}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 
    3}, {3, 1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 3}, {3, 2}}, {{1, 
    1}, {1, 2}} -> {{2, 2}, {2, 3}, {3, 3}}, {{1, 1}, {1, 2}} -> {{1, 
    1}, {1, 3}, {1, 4}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 3}, {2, 
    4}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 3}, {3, 4}}, {{1, 1}, {1, 
    2}} -> {{1, 1}, {2, 3}, {2, 4}}, {{1, 1}, {1, 2}} -> {{1, 1}, {2, 
    3}, {3, 4}}, {{1, 1}, {1, 2}} -> {{1, 2}, {1, 3}, {1, 4}}, {{1, 
    1}, {1, 2}} -> {{1, 2}, {1, 3}, {2, 4}}, {{1, 1}, {1, 2}} -> {{1, 
    2}, {2, 3}, {3, 4}}, {{1, 1}, {1, 2}} -> {{2, 1}, {1, 3}, {3, 
    4}}, {{1, 1}, {1, 2}} -> {{2, 1}, {2, 3}, {1, 4}}, {{1, 1}, {1, 
    2}} -> {{2, 1}, {2, 3}, {2, 4}}, {{1, 1}, {1, 2}} -> {{2, 2}, {1, 
    3}, {1, 4}}, {{1, 1}, {1, 2}} -> {{2, 2}, {1, 3}, {3, 4}}, {{1, 
    1}, {1, 2}} -> {{2, 2}, {2, 3}, {1, 4}}, {{1, 1}, {1, 2}} -> {{2, 
    2}, {2, 3}, {2, 4}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 3}, {3, 
    4}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 3}, {4, 1}}, {{1, 1}, {1, 
    2}} -> {{1, 1}, {1, 3}, {4, 2}}, {{1, 1}, {1, 2}} -> {{1, 1}, {1, 
    3}, {4, 3}}, {{1, 1}, {1, 2}} -> {{1, 1}, {2, 3}, {4, 3}}, {{1, 
    1}, {1, 2}} -> {{1, 2}, {1, 3}, {4, 1}}, {{1, 1}, {1, 2}} -> {{1, 
    2}, {1, 3}, {4, 2}}, {{1, 1}, {1, 2}} -> {{1, 2}, {2, 3}, {4, 
    2}}, {{1, 1}, {1, 2}} -> {{1, 2}, {2, 3}, {4, 3}}, {{1, 1}, {1, 
    2}} -> {{2, 1}, {1, 3}, {4, 1}}, {{1, 1}, {1, 2}} -> {{2, 1}, {1, 
    3}, {4, 3}}, {{1, 1}, {1, 2}} -> {{2, 1}, {2, 3}, {4, 1}}, {{1, 
    1}, {1, 2}} -> {{2, 1}, {2, 3}, {4, 2}}, {{1, 1}, {1, 2}} -> {{2, 
    2}, {1, 3}, {4, 3}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 3}, {4, 
    1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {2, 3}, {4, 2}}, {{1, 1}, {1, 
    2}} -> {{2, 2}, {2, 3}, {4, 3}}, {{1, 1}, {1, 2}} -> {{1, 1}, {3, 
    1}, {2, 2}}, {{1, 1}, {1, 2}} -> {{1, 1}, {3, 1}, {2, 3}}, {{1, 
    1}, {1, 2}} -> {{1, 1}, {3, 1}, {3, 1}}, {{1, 1}, {1, 2}} -> {{1, 
    1}, {3, 1}, {3, 2}}, {{1, 1}, {1, 2}} -> {{1, 1}, {3, 2}, {3, 
    2}}, {{1, 1}, {1, 2}} -> {{2, 2}, {3, 1}, {3, 1}}, {{1, 1}, {1, 
    2}} -> {{2, 2}, {3, 2}, {1, 1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {3, 
    2}, {1, 3}}, {{1, 1}, {1, 2}} -> {{2, 2}, {3, 2}, {3, 1}}, {{1, 
    1}, {1, 2}} -> {{2, 2}, {3, 2}, {3, 2}}, {{1, 1}, {1, 2}} -> {{1, 
    1}, {3, 1}, {2, 4}}, {{1, 1}, {1, 2}} -> {{1, 1}, {3, 1}, {3, 
    4}}, {{1, 1}, {1, 2}} -> {{1, 1}, {3, 2}, {2, 4}}, {{1, 1}, {1, 
    2}} -> {{1, 1}, {3, 2}, {3, 4}}, {{1, 1}, {1, 2}} -> {{2, 2}, {3, 
    1}, {1, 4}}, {{1, 1}, {1, 2}} -> {{2, 2}, {3, 1}, {3, 4}}, {{1, 
    1}, {1, 2}} -> {{2, 2}, {3, 2}, {1, 4}}, {{1, 1}, {1, 2}} -> {{2, 
    2}, {3, 2}, {3, 4}}, {{1, 1}, {1, 2}} -> {{1, 1}, {3, 1}, {4, 
    1}}, {{1, 1}, {1, 2}} -> {{1, 1}, {3, 1}, {4, 2}}, {{1, 1}, {1, 
    2}} -> {{1, 1}, {3, 1}, {4, 3}}, {{1, 1}, {1, 2}} -> {{1, 1}, {3, 
    2}, {4, 2}}, {{1, 1}, {1, 2}} -> {{1, 2}, {3, 2}, {4, 2}}, {{1, 
    1}, {1, 2}} -> {{2, 1}, {3, 1}, {4, 1}}, {{1, 1}, {1, 2}} -> {{2, 
    2}, {3, 1}, {4, 1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {3, 2}, {4, 
    1}}, {{1, 1}, {1, 2}} -> {{2, 2}, {3, 2}, {4, 2}}, {{1, 1}, {1, 
    2}} -> {{2, 2}, {3, 2}, {4, 3}}, {{1, 1}, {1, 2}} -> {{1, 1}, {3, 
    4}, {4, 2}}, {{1, 1}, {1, 2}} -> {{2, 2}, {3, 4}, {4, 1}}, {{1, 
    1}, {1, 2}} -> {{1, 3}, {1, 2}, {3, 2}}, {{1, 1}, {1, 2}} -> {{1, 
    3}, {1, 3}, {1, 2}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 3}, {1, 
    3}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 3}, {2, 1}}, {{1, 1}, {1, 
    2}} -> {{1, 3}, {1, 3}, {2, 3}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 
    3}, {3, 1}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 3}, {3, 2}}, {{1, 
    1}, {1, 2}} -> {{1, 3}, {3, 1}, {1, 2}}, {{1, 1}, {1, 2}} -> {{1, 
    3}, {3, 1}, {2, 1}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 2}, {2, 
    1}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 1}, {3, 1}}, {{1, 1}, {1, 
    2}} -> {{2, 3}, {2, 3}, {1, 2}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 
    3}, {1, 3}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 3}, {2, 1}}, {{1, 
    1}, {1, 2}} -> {{2, 3}, {2, 3}, {2, 3}}, {{1, 1}, {1, 2}} -> {{2, 
    3}, {2, 3}, {3, 1}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 3}, {3, 
    2}}, {{1, 1}, {1, 2}} -> {{2, 3}, {3, 2}, {1, 2}}, {{1, 1}, {1, 
    2}} -> {{2, 3}, {3, 2}, {2, 1}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 
    2}, {3, 4}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 3}, {1, 4}}, {{1, 
    1}, {1, 2}} -> {{1, 3}, {1, 3}, {2, 4}}, {{1, 1}, {1, 2}} -> {{1, 
    3}, {1, 3}, {3, 4}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 1}, {1, 
    4}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 1}, {2, 4}}, {{1, 1}, {1, 
    2}} -> {{1, 3}, {3, 2}, {2, 4}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 
    1}, {3, 4}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 3}, {1, 4}}, {{1, 
    1}, {1, 2}} -> {{2, 3}, {2, 3}, {2, 4}}, {{1, 1}, {1, 2}} -> {{2, 
    3}, {2, 3}, {3, 4}}, {{1, 1}, {1, 2}} -> {{2, 3}, {3, 1}, {1, 
    4}}, {{1, 1}, {1, 2}} -> {{2, 3}, {3, 2}, {1, 4}}, {{1, 1}, {1, 
    2}} -> {{2, 3}, {3, 2}, {2, 4}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 
    2}, {4, 3}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 3}, {4, 1}}, {{1, 
    1}, {1, 2}} -> {{1, 3}, {1, 3}, {4, 2}}, {{1, 1}, {1, 2}} -> {{1, 
    3}, {1, 3}, {4, 3}}, {{1, 1}, {1, 2}} -> {{1, 3}, {2, 3}, {4, 
    3}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 1}, {4, 1}}, {{1, 1}, {1, 
    2}} -> {{1, 3}, {3, 1}, {4, 2}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 
    2}, {4, 2}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 2}, {4, 3}}, {{1, 
    1}, {1, 2}} -> {{2, 3}, {2, 1}, {4, 3}}, {{1, 1}, {1, 2}} -> {{2, 
    3}, {2, 3}, {4, 1}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 3}, {4, 
    2}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 3}, {4, 3}}, {{1, 1}, {1, 
    2}} -> {{2, 3}, {3, 1}, {4, 1}}, {{1, 1}, {1, 2}} -> {{2, 3}, {3, 
    1}, {4, 3}}, {{1, 1}, {1, 2}} -> {{2, 3}, {3, 2}, {4, 1}}, {{1, 
    1}, {1, 2}} -> {{2, 3}, {3, 2}, {4, 2}}, {{1, 1}, {1, 2}} -> {{1, 
    3}, {1, 4}, {2, 1}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 4}, {2, 
    3}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 4}, {3, 2}}, {{1, 1}, {1, 
    2}} -> {{1, 3}, {1, 4}, {3, 4}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 
    4}, {2, 3}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 4}, {2, 4}}, {{1, 
    1}, {1, 2}} -> {{1, 3}, {3, 4}, {4, 1}}, {{1, 1}, {1, 2}} -> {{1, 
    3}, {3, 4}, {4, 2}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 4}, {1, 
    2}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 4}, {1, 3}}, {{1, 1}, {1, 
    2}} -> {{2, 3}, {2, 4}, {3, 1}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 
    4}, {3, 4}}, {{1, 1}, {1, 2}} -> {{2, 3}, {3, 4}, {1, 4}}, {{1, 
    1}, {1, 2}} -> {{2, 3}, {3, 4}, {4, 1}}, {{1, 1}, {1, 2}} -> {{2, 
    3}, {3, 4}, {4, 2}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 4}, {1, 
    5}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 4}, {2, 5}}, {{1, 1}, {1, 
    2}} -> {{1, 3}, {1, 4}, {3, 5}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 
    4}, {2, 5}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 4}, {4, 5}}, {{1, 
    1}, {1, 2}} -> {{2, 3}, {2, 4}, {1, 5}}, {{1, 1}, {1, 2}} -> {{2, 
    3}, {2, 4}, {2, 5}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 4}, {3, 
    5}}, {{1, 1}, {1, 2}} -> {{2, 3}, {3, 4}, {1, 5}}, {{1, 1}, {1, 
    2}} -> {{2, 3}, {3, 4}, {4, 5}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 
    4}, {5, 1}}, {{1, 1}, {1, 2}} -> {{1, 3}, {1, 4}, {5, 2}}, {{1, 
    1}, {1, 2}} -> {{1, 3}, {1, 4}, {5, 3}}, {{1, 1}, {1, 2}} -> {{1, 
    3}, {3, 4}, {5, 2}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 4}, {5, 
    3}}, {{1, 1}, {1, 2}} -> {{1, 3}, {3, 4}, {5, 4}}, {{1, 1}, {1, 
    2}} -> {{2, 3}, {2, 4}, {5, 1}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 
    4}, {5, 2}}, {{1, 1}, {1, 2}} -> {{2, 3}, {2, 4}, {5, 3}}, {{1, 
    1}, {1, 2}} -> {{2, 3}, {3, 4}, {5, 1}}, {{1, 1}, {1, 2}} -> {{2, 
    3}, {3, 4}, {5, 3}}, {{1, 1}, {1, 2}} -> {{2, 3}, {3, 4}, {5, 
    4}}, {{1, 1}, {1, 2}} -> {{1, 3}, {4, 3}, {2, 5}}, {{1, 1}, {1, 
    2}} -> {{2, 3}, {4, 3}, {1, 5}}, {{1, 1}, {1, 2}} -> {{1, 3}, {4, 
    3}, {5, 2}}, {{1, 1}, {1, 2}} -> {{1, 3}, {4, 3}, {5, 3}}, {{1, 
    1}, {1, 2}} -> {{2, 3}, {4, 3}, {5, 1}}, {{1, 1}, {1, 2}} -> {{2, 
    3}, {4, 3}, {5, 3}}, {{1, 1}, {1, 2}} -> {{3, 1}, {1, 3}, {2, 
    3}}, {{1, 1}, {1, 2}} -> {{3, 1}, {1, 3}, {3, 2}}, {{1, 1}, {1, 
    2}} -> {{3, 1}, {3, 1}, {1, 2}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 
    1}, {1, 3}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 1}, {2, 1}}, {{1, 
    1}, {1, 2}} -> {{3, 1}, {3, 1}, {2, 3}}, {{1, 1}, {1, 2}} -> {{3, 
    1}, {3, 1}, {3, 1}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 1}, {3, 
    2}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 2}, {1, 2}}, {{1, 1}, {1, 
    2}} -> {{3, 2}, {2, 3}, {1, 3}}, {{1, 1}, {1, 2}} -> {{3, 2}, {2, 
    3}, {3, 1}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 1}, {2, 1}}, {{1, 
    1}, {1, 2}} -> {{3, 2}, {3, 2}, {1, 2}}, {{1, 1}, {1, 2}} -> {{3, 
    2}, {3, 2}, {1, 3}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 2}, {2, 
    1}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 2}, {2, 3}}, {{1, 1}, {1, 
    2}} -> {{3, 2}, {3, 2}, {3, 1}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 
    2}, {3, 2}}, {{1, 1}, {1, 2}} -> {{3, 3}, {1, 3}, {1, 2}}, {{1, 
    1}, {1, 2}} -> {{3, 3}, {1, 3}, {1, 3}}, {{1, 1}, {1, 2}} -> {{3, 
    3}, {1, 3}, {2, 1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {1, 3}, {2, 
    2}}, {{1, 1}, {1, 2}} -> {{3, 3}, {1, 3}, {2, 3}}, {{1, 1}, {1, 
    2}} -> {{3, 3}, {2, 3}, {1, 1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {2, 
    3}, {1, 2}}, {{1, 1}, {1, 2}} -> {{3, 3}, {2, 3}, {2, 1}}, {{1, 
    1}, {1, 2}} -> {{3, 3}, {2, 3}, {2, 3}}, {{1, 1}, {1, 2}} -> {{3, 
    3}, {3, 1}, {1, 1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 1}, {1, 
    2}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 1}, {1, 3}}, {{1, 1}, {1, 
    2}} -> {{3, 3}, {3, 1}, {2, 1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 
    1}, {2, 2}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 1}, {2, 3}}, {{1, 
    1}, {1, 2}} -> {{3, 3}, {3, 1}, {3, 1}}, {{1, 1}, {1, 2}} -> {{3, 
    3}, {3, 1}, {3, 2}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 2}, {1, 
    1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 2}, {1, 2}}, {{1, 1}, {1, 
    2}} -> {{3, 3}, {3, 2}, {1, 3}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 
    2}, {2, 1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 2}, {2, 2}}, {{1, 
    1}, {1, 2}} -> {{3, 3}, {3, 2}, {2, 3}}, {{1, 1}, {1, 2}} -> {{3, 
    3}, {3, 2}, {3, 2}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 3}, {1, 
    3}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 3}, {2, 3}}, {{1, 1}, {1, 
    2}} -> {{3, 3}, {3, 3}, {3, 1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 
    3}, {3, 2}}, {{1, 1}, {1, 2}} -> {{3, 1}, {1, 2}, {2, 4}}, {{1, 
    1}, {1, 2}} -> {{3, 1}, {1, 3}, {3, 4}}, {{1, 1}, {1, 2}} -> {{3, 
    1}, {3, 1}, {1, 4}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 1}, {2, 
    4}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 1}, {3, 4}}, {{1, 1}, {1, 
    2}} -> {{3, 1}, {3, 2}, {1, 4}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 
    2}, {3, 4}}, {{1, 1}, {1, 2}} -> {{3, 2}, {2, 1}, {1, 4}}, {{1, 
    1}, {1, 2}} -> {{3, 2}, {2, 3}, {3, 4}}, {{1, 1}, {1, 2}} -> {{3, 
    2}, {3, 1}, {2, 4}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 2}, {1, 
    4}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 2}, {2, 4}}, {{1, 1}, {1, 
    2}} -> {{3, 2}, {3, 2}, {3, 4}}, {{1, 1}, {1, 2}} -> {{3, 3}, {1, 
    3}, {1, 4}}, {{1, 1}, {1, 2}} -> {{3, 3}, {1, 3}, {2, 4}}, {{1, 
    1}, {1, 2}} -> {{3, 3}, {2, 3}, {1, 4}}, {{1, 1}, {1, 2}} -> {{3, 
    3}, {2, 3}, {2, 4}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 1}, {1, 
    4}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 1}, {2, 4}}, {{1, 1}, {1, 
    2}} -> {{3, 3}, {3, 1}, {3, 4}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 
    2}, {1, 4}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 2}, {2, 4}}, {{1, 
    1}, {1, 2}} -> {{3, 3}, {3, 2}, {3, 4}}, {{1, 1}, {1, 2}} -> {{3, 
    1}, {1, 2}, {4, 1}}, {{1, 1}, {1, 2}} -> {{3, 1}, {1, 2}, {4, 
    2}}, {{1, 1}, {1, 2}} -> {{3, 1}, {1, 3}, {4, 3}}, {{1, 1}, {1, 
    2}} -> {{3, 1}, {3, 1}, {4, 1}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 
    1}, {4, 2}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 1}, {4, 3}}, {{1, 
    1}, {1, 2}} -> {{3, 1}, {3, 2}, {4, 1}}, {{1, 1}, {1, 2}} -> {{3, 
    1}, {3, 2}, {4, 3}}, {{1, 1}, {1, 2}} -> {{3, 2}, {2, 1}, {4, 
    1}}, {{1, 1}, {1, 2}} -> {{3, 2}, {2, 1}, {4, 2}}, {{1, 1}, {1, 
    2}} -> {{3, 2}, {2, 3}, {4, 3}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 
    1}, {4, 2}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 2}, {4, 1}}, {{1, 
    1}, {1, 2}} -> {{3, 2}, {3, 2}, {4, 2}}, {{1, 1}, {1, 2}} -> {{3, 
    2}, {3, 2}, {4, 3}}, {{1, 1}, {1, 2}} -> {{3, 3}, {1, 3}, {4, 
    1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {1, 3}, {4, 2}}, {{1, 1}, {1, 
    2}} -> {{3, 3}, {1, 3}, {4, 3}}, {{1, 1}, {1, 2}} -> {{3, 3}, {2, 
    3}, {4, 1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {2, 3}, {4, 2}}, {{1, 
    1}, {1, 2}} -> {{3, 3}, {2, 3}, {4, 3}}, {{1, 1}, {1, 2}} -> {{3, 
    3}, {3, 1}, {4, 1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 1}, {4, 
    2}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 1}, {4, 3}}, {{1, 1}, {1, 
    2}} -> {{3, 3}, {3, 2}, {4, 1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 
    2}, {4, 2}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 2}, {4, 3}}, {{1, 
    1}, {1, 2}} -> {{3, 1}, {1, 4}, {2, 4}}, {{1, 1}, {1, 2}} -> {{3, 
    1}, {1, 4}, {4, 2}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 4}, {1, 
    2}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 4}, {1, 4}}, {{1, 1}, {1, 
    2}} -> {{3, 1}, {3, 4}, {2, 1}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 
    4}, {2, 3}}, {{1, 1}, {1, 2}} -> {{3, 2}, {2, 4}, {1, 4}}, {{1, 
    1}, {1, 2}} -> {{3, 2}, {2, 4}, {4, 1}}, {{1, 1}, {1, 2}} -> {{3, 
    2}, {3, 4}, {1, 2}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 4}, {1, 
    3}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 4}, {2, 1}}, {{1, 1}, {1, 
    2}} -> {{3, 2}, {3, 4}, {2, 4}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 
    4}, {1, 3}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 4}, {1, 4}}, {{1, 
    1}, {1, 2}} -> {{3, 3}, {3, 4}, {2, 3}}, {{1, 1}, {1, 2}} -> {{3, 
    3}, {3, 4}, {2, 4}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 4}, {4, 
    1}}, {{1, 1}, {1, 2}} -> {{3, 3}, {3, 4}, {4, 2}}, {{1, 1}, {1, 
    2}} -> {{3, 1}, {1, 4}, {2, 5}}, {{1, 1}, {1, 2}} -> {{3, 1}, {1, 
    4}, {4, 5}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 4}, {1, 5}}, {{1, 
    1}, {1, 2}} -> {{3, 1}, {3, 4}, {2, 5}}, {{1, 1}, {1, 2}} -> {{3, 
    1}, {3, 4}, {3, 5}}, {{1, 1}, {1, 2}} -> {{3, 2}, {2, 4}, {1, 
    5}}, {{1, 1}, {1, 2}} -> {{3, 2}, {2, 4}, {4, 5}}, {{1, 1}, {1, 
    2}} -> {{3, 2}, {3, 4}, {1, 5}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 
    4}, {2, 5}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 4}, {3, 5}}, {{1, 
    1}, {1, 2}} -> {{3, 1}, {1, 4}, {5, 1}}, {{1, 1}, {1, 2}} -> {{3, 
    1}, {1, 4}, {5, 2}}, {{1, 1}, {1, 2}} -> {{3, 1}, {1, 4}, {5, 
    4}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 4}, {5, 1}}, {{1, 1}, {1, 
    2}} -> {{3, 1}, {3, 4}, {5, 2}}, {{1, 1}, {1, 2}} -> {{3, 1}, {3, 
    4}, {5, 3}}, {{1, 1}, {1, 2}} -> {{3, 2}, {2, 4}, {5, 1}}, {{1, 
    1}, {1, 2}} -> {{3, 2}, {2, 4}, {5, 2}}, {{1, 1}, {1, 2}} -> {{3, 
    2}, {2, 4}, {5, 4}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 4}, {5, 
    1}}, {{1, 1}, {1, 2}} -> {{3, 2}, {3, 4}, {5, 2}}, {{1, 1}, {1, 
    2}} -> {{3, 2}, {3, 4}, {5, 3}}, {{1, 1}, {1, 2}} -> {{3, 3}, {4, 
    3}, {1, 4}}, {{1, 1}, {1, 2}} -> {{3, 3}, {4, 3}, {2, 4}}, {{1, 
    1}, {1, 2}} -> {{3, 3}, {4, 3}, {4, 1}}, {{1, 1}, {1, 2}} -> {{3, 
    3}, {4, 3}, {4, 2}}, {{1, 1}, {1, 2}} -> {{3, 1}, {4, 1}, {2, 
    5}}, {{1, 1}, {1, 2}} -> {{3, 2}, {4, 2}, {1, 5}}, {{1, 1}, {1, 
    2}} -> {{3, 1}, {4, 1}, {5, 1}}, {{1, 1}, {1, 2}} -> {{3, 1}, {4, 
    1}, {5, 2}}, {{1, 1}, {1, 2}} -> {{3, 2}, {4, 2}, {5, 1}}, {{1, 
    1}, {1, 2}} -> {{3, 2}, {4, 2}, {5, 2}}, {{1, 1}, {1, 2}} -> {{3, 
    4}, {3, 1}, {2, 4}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 1}, {4, 
    1}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 1}, {4, 2}}, {{1, 1}, {1, 
    2}} -> {{3, 4}, {3, 2}, {1, 4}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 
    2}, {4, 1}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 2}, {4, 2}}, {{1, 
    1}, {1, 2}} -> {{3, 4}, {3, 4}, {1, 3}}, {{1, 1}, {1, 2}} -> {{3, 
    4}, {3, 4}, {1, 4}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 4}, {2, 
    3}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 4}, {2, 4}}, {{1, 1}, {1, 
    2}} -> {{3, 4}, {3, 4}, {3, 1}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 
    4}, {3, 2}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 4}, {4, 1}}, {{1, 
    1}, {1, 2}} -> {{3, 4}, {3, 4}, {4, 2}}, {{1, 1}, {1, 2}} -> {{3, 
    4}, {4, 1}, {1, 2}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 1}, {2, 
    1}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 2}, {1, 2}}, {{1, 1}, {1, 
    2}} -> {{3, 4}, {4, 2}, {2, 1}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 
    3}, {1, 3}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 3}, {2, 3}}, {{1, 
    1}, {1, 2}} -> {{3, 4}, {4, 3}, {3, 1}}, {{1, 1}, {1, 2}} -> {{3, 
    4}, {4, 3}, {3, 2}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 1}, {4, 
    5}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 2}, {4, 5}}, {{1, 1}, {1, 
    2}} -> {{3, 4}, {4, 1}, {1, 5}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 
    1}, {2, 5}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 2}, {1, 5}}, {{1, 
    1}, {1, 2}} -> {{3, 4}, {4, 2}, {2, 5}}, {{1, 1}, {1, 2}} -> {{3, 
    4}, {3, 1}, {5, 4}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 2}, {5, 
    4}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 1}, {5, 1}}, {{1, 1}, {1, 
    2}} -> {{3, 4}, {4, 1}, {5, 2}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 
    1}, {5, 4}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 2}, {5, 1}}, {{1, 
    1}, {1, 2}} -> {{3, 4}, {4, 2}, {5, 2}}, {{1, 1}, {1, 2}} -> {{3, 
    4}, {4, 2}, {5, 4}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 5}, {1, 
    3}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 5}, {1, 4}}, {{1, 1}, {1, 
    2}} -> {{3, 4}, {3, 5}, {2, 3}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 
    5}, {2, 4}}, {{1, 1}, {1, 2}} -> {{3, 4}, {3, 5}, {4, 1}}, {{1, 
    1}, {1, 2}} -> {{3, 4}, {3, 5}, {4, 2}}, {{1, 1}, {1, 2}} -> {{3, 
    4}, {4, 5}, {1, 5}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 5}, {2, 
    5}}, {{1, 1}, {1, 2}} -> {{3, 4}, {4, 5}, {5, 1}}, {{1, 1}, {1, 
    2}} -> {{3, 4}, {4, 5}, {5, 2}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 
    1}, {1, 1}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 1}, {1, 2}}, {{1, 
    1}, {2, 1}} -> {{1, 1}, {1, 1}, {2, 1}}, {{1, 1}, {2, 1}} -> {{1, 
    1}, {1, 1}, {2, 2}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 2}, {1, 
    2}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 2}, {2, 1}}, {{1, 1}, {2, 
    1}} -> {{1, 1}, {1, 2}, {2, 2}}, {{1, 1}, {2, 1}} -> {{1, 1}, {2, 
    1}, {2, 1}}, {{1, 1}, {2, 1}} -> {{1, 2}, {1, 2}, {1, 2}}, {{1, 
    1}, {2, 1}} -> {{1, 2}, {1, 2}, {2, 1}}, {{1, 1}, {2, 1}} -> {{2, 
    1}, {2, 1}, {1, 2}}, {{1, 1}, {2, 1}} -> {{2, 1}, {2, 1}, {2, 
    1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {1, 2}, {1, 2}}, {{1, 1}, {2, 
    1}} -> {{2, 2}, {2, 1}, {1, 1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 
    1}, {1, 2}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 1}, {2, 1}}, {{1, 
    1}, {2, 1}} -> {{2, 2}, {2, 2}, {1, 1}}, {{1, 1}, {2, 1}} -> {{2, 
    2}, {2, 2}, {1, 2}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 2}, {2, 
    1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 2}, {2, 2}}, {{1, 1}, {2, 
    1}} -> {{1, 1}, {1, 1}, {1, 3}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 
    1}, {2, 3}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 2}, {1, 3}}, {{1, 
    1}, {2, 1}} -> {{1, 1}, {1, 2}, {2, 3}}, {{1, 1}, {2, 1}} -> {{1, 
    1}, {2, 1}, {2, 3}}, {{1, 1}, {2, 1}} -> {{1, 2}, {1, 2}, {1, 
    3}}, {{1, 1}, {2, 1}} -> {{1, 2}, {1, 2}, {2, 3}}, {{1, 1}, {2, 
    1}} -> {{1, 2}, {2, 1}, {1, 3}}, {{1, 1}, {2, 1}} -> {{2, 1}, {1, 
    2}, {2, 3}}, {{1, 1}, {2, 1}} -> {{2, 1}, {2, 1}, {1, 3}}, {{1, 
    1}, {2, 1}} -> {{2, 1}, {2, 1}, {2, 3}}, {{1, 1}, {2, 1}} -> {{2, 
    2}, {1, 2}, {1, 3}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 1}, {1, 
    3}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 1}, {2, 3}}, {{1, 1}, {2, 
    1}} -> {{2, 2}, {2, 2}, {1, 3}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 
    2}, {2, 3}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 1}, {3, 1}}, {{1, 
    1}, {2, 1}} -> {{1, 1}, {1, 1}, {3, 2}}, {{1, 1}, {2, 1}} -> {{1, 
    1}, {1, 2}, {3, 1}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 2}, {3, 
    2}}, {{1, 1}, {2, 1}} -> {{1, 1}, {2, 1}, {3, 1}}, {{1, 1}, {2, 
    1}} -> {{1, 1}, {2, 1}, {3, 2}}, {{1, 1}, {2, 1}} -> {{1, 2}, {1, 
    2}, {3, 1}}, {{1, 1}, {2, 1}} -> {{1, 2}, {1, 2}, {3, 2}}, {{1, 
    1}, {2, 1}} -> {{1, 2}, {2, 1}, {3, 1}}, {{1, 1}, {2, 1}} -> {{2, 
    1}, {1, 2}, {3, 2}}, {{1, 1}, {2, 1}} -> {{2, 1}, {2, 1}, {3, 
    1}}, {{1, 1}, {2, 1}} -> {{2, 1}, {2, 1}, {3, 2}}, {{1, 1}, {2, 
    1}} -> {{2, 2}, {1, 2}, {3, 1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {1, 
    2}, {3, 2}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 1}, {3, 1}}, {{1, 
    1}, {2, 1}} -> {{2, 2}, {2, 1}, {3, 2}}, {{1, 1}, {2, 1}} -> {{2, 
    2}, {2, 2}, {3, 1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 2}, {3, 
    2}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 3}, {1, 3}}, {{1, 1}, {2, 
    1}} -> {{1, 1}, {1, 3}, {2, 1}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 
    3}, {2, 2}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 3}, {2, 3}}, {{1, 
    1}, {2, 1}} -> {{1, 1}, {1, 3}, {3, 1}}, {{1, 1}, {2, 1}} -> {{1, 
    1}, {1, 3}, {3, 2}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 3}, {3, 
    3}}, {{1, 1}, {2, 1}} -> {{1, 1}, {2, 3}, {2, 3}}, {{1, 1}, {2, 
    1}} -> {{1, 1}, {2, 3}, {3, 2}}, {{1, 1}, {2, 1}} -> {{1, 2}, {1, 
    3}, {2, 3}}, {{1, 1}, {2, 1}} -> {{1, 2}, {2, 3}, {3, 1}}, {{1, 
    1}, {2, 1}} -> {{2, 1}, {2, 3}, {1, 3}}, {{1, 1}, {2, 1}} -> {{2, 
    2}, {1, 3}, {1, 3}}, {{1, 1}, {2, 1}} -> {{2, 2}, {1, 3}, {3, 
    1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 3}, {1, 1}}, {{1, 1}, {2, 
    1}} -> {{2, 2}, {2, 3}, {1, 2}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 
    3}, {1, 3}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 3}, {2, 3}}, {{1, 
    1}, {2, 1}} -> {{2, 2}, {2, 3}, {3, 1}}, {{1, 1}, {2, 1}} -> {{2, 
    2}, {2, 3}, {3, 2}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 3}, {3, 
    3}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 3}, {1, 4}}, {{1, 1}, {2, 
    1}} -> {{1, 1}, {1, 3}, {2, 4}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 
    3}, {3, 4}}, {{1, 1}, {2, 1}} -> {{1, 1}, {2, 3}, {2, 4}}, {{1, 
    1}, {2, 1}} -> {{1, 1}, {2, 3}, {3, 4}}, {{1, 1}, {2, 1}} -> {{1, 
    2}, {1, 3}, {1, 4}}, {{1, 1}, {2, 1}} -> {{1, 2}, {1, 3}, {2, 
    4}}, {{1, 1}, {2, 1}} -> {{1, 2}, {2, 3}, {3, 4}}, {{1, 1}, {2, 
    1}} -> {{2, 1}, {1, 3}, {3, 4}}, {{1, 1}, {2, 1}} -> {{2, 1}, {2, 
    3}, {1, 4}}, {{1, 1}, {2, 1}} -> {{2, 1}, {2, 3}, {2, 4}}, {{1, 
    1}, {2, 1}} -> {{2, 2}, {1, 3}, {1, 4}}, {{1, 1}, {2, 1}} -> {{2, 
    2}, {1, 3}, {3, 4}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 3}, {1, 
    4}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 3}, {2, 4}}, {{1, 1}, {2, 
    1}} -> {{2, 2}, {2, 3}, {3, 4}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 
    3}, {4, 1}}, {{1, 1}, {2, 1}} -> {{1, 1}, {1, 3}, {4, 2}}, {{1, 
    1}, {2, 1}} -> {{1, 1}, {1, 3}, {4, 3}}, {{1, 1}, {2, 1}} -> {{1, 
    1}, {2, 3}, {4, 3}}, {{1, 1}, {2, 1}} -> {{1, 2}, {1, 3}, {4, 
    1}}, {{1, 1}, {2, 1}} -> {{1, 2}, {1, 3}, {4, 2}}, {{1, 1}, {2, 
    1}} -> {{1, 2}, {2, 3}, {4, 2}}, {{1, 1}, {2, 1}} -> {{1, 2}, {2, 
    3}, {4, 3}}, {{1, 1}, {2, 1}} -> {{2, 1}, {1, 3}, {4, 1}}, {{1, 
    1}, {2, 1}} -> {{2, 1}, {1, 3}, {4, 3}}, {{1, 1}, {2, 1}} -> {{2, 
    1}, {2, 3}, {4, 1}}, {{1, 1}, {2, 1}} -> {{2, 1}, {2, 3}, {4, 
    2}}, {{1, 1}, {2, 1}} -> {{2, 2}, {1, 3}, {4, 3}}, {{1, 1}, {2, 
    1}} -> {{2, 2}, {2, 3}, {4, 1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 
    3}, {4, 2}}, {{1, 1}, {2, 1}} -> {{2, 2}, {2, 3}, {4, 3}}, {{1, 
    1}, {2, 1}} -> {{1, 1}, {3, 1}, {2, 2}}, {{1, 1}, {2, 1}} -> {{1, 
    1}, {3, 1}, {2, 3}}, {{1, 1}, {2, 1}} -> {{1, 1}, {3, 1}, {3, 
    1}}, {{1, 1}, {2, 1}} -> {{1, 1}, {3, 1}, {3, 2}}, {{1, 1}, {2, 
    1}} -> {{1, 1}, {3, 2}, {3, 2}}, {{1, 1}, {2, 1}} -> {{2, 2}, {3, 
    1}, {3, 1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {3, 2}, {1, 1}}, {{1, 
    1}, {2, 1}} -> {{2, 2}, {3, 2}, {1, 3}}, {{1, 1}, {2, 1}} -> {{2, 
    2}, {3, 2}, {3, 1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {3, 2}, {3, 
    2}}, {{1, 1}, {2, 1}} -> {{1, 1}, {3, 1}, {2, 4}}, {{1, 1}, {2, 
    1}} -> {{1, 1}, {3, 1}, {3, 4}}, {{1, 1}, {2, 1}} -> {{1, 1}, {3, 
    2}, {2, 4}}, {{1, 1}, {2, 1}} -> {{1, 1}, {3, 2}, {3, 4}}, {{1, 
    1}, {2, 1}} -> {{2, 2}, {3, 1}, {1, 4}}, {{1, 1}, {2, 1}} -> {{2, 
    2}, {3, 1}, {3, 4}}, {{1, 1}, {2, 1}} -> {{2, 2}, {3, 2}, {1, 
    4}}, {{1, 1}, {2, 1}} -> {{2, 2}, {3, 2}, {3, 4}}, {{1, 1}, {2, 
    1}} -> {{1, 1}, {3, 1}, {4, 1}}, {{1, 1}, {2, 1}} -> {{1, 1}, {3, 
    1}, {4, 2}}, {{1, 1}, {2, 1}} -> {{1, 1}, {3, 1}, {4, 3}}, {{1, 
    1}, {2, 1}} -> {{1, 1}, {3, 2}, {4, 2}}, {{1, 1}, {2, 1}} -> {{1, 
    2}, {3, 2}, {4, 2}}, {{1, 1}, {2, 1}} -> {{2, 1}, {3, 1}, {4, 
    1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {3, 1}, {4, 1}}, {{1, 1}, {2, 
    1}} -> {{2, 2}, {3, 2}, {4, 1}}, {{1, 1}, {2, 1}} -> {{2, 2}, {3, 
    2}, {4, 2}}, {{1, 1}, {2, 1}} -> {{2, 2}, {3, 2}, {4, 3}}, {{1, 
    1}, {2, 1}} -> {{1, 1}, {3, 4}, {4, 2}}, {{1, 1}, {2, 1}} -> {{2, 
    2}, {3, 4}, {4, 1}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 2}, {3, 
    2}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 3}, {1, 2}}, {{1, 1}, {2, 
    1}} -> {{1, 3}, {1, 3}, {1, 3}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 
    3}, {2, 1}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 3}, {2, 3}}, {{1, 
    1}, {2, 1}} -> {{1, 3}, {1, 3}, {3, 1}}, {{1, 1}, {2, 1}} -> {{1, 
    3}, {1, 3}, {3, 2}}, {{1, 1}, {2, 1}} -> {{1, 3}, {3, 1}, {1, 
    2}}, {{1, 1}, {2, 1}} -> {{1, 3}, {3, 1}, {2, 1}}, {{1, 1}, {2, 
    1}} -> {{1, 3}, {3, 2}, {2, 1}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 
    1}, {3, 1}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 3}, {1, 2}}, {{1, 
    1}, {2, 1}} -> {{2, 3}, {2, 3}, {1, 3}}, {{1, 1}, {2, 1}} -> {{2, 
    3}, {2, 3}, {2, 1}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 3}, {2, 
    3}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 3}, {3, 1}}, {{1, 1}, {2, 
    1}} -> {{2, 3}, {2, 3}, {3, 2}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 
    2}, {1, 2}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 2}, {2, 1}}, {{1, 
    1}, {2, 1}} -> {{1, 3}, {1, 2}, {3, 4}}, {{1, 1}, {2, 1}} -> {{1, 
    3}, {1, 3}, {1, 4}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 3}, {2, 
    4}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 3}, {3, 4}}, {{1, 1}, {2, 
    1}} -> {{1, 3}, {3, 1}, {1, 4}}, {{1, 1}, {2, 1}} -> {{1, 3}, {3, 
    1}, {2, 4}}, {{1, 1}, {2, 1}} -> {{1, 3}, {3, 2}, {2, 4}}, {{1, 
    1}, {2, 1}} -> {{2, 3}, {2, 1}, {3, 4}}, {{1, 1}, {2, 1}} -> {{2, 
    3}, {2, 3}, {1, 4}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 3}, {2, 
    4}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 3}, {3, 4}}, {{1, 1}, {2, 
    1}} -> {{2, 3}, {3, 1}, {1, 4}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 
    2}, {1, 4}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 2}, {2, 4}}, {{1, 
    1}, {2, 1}} -> {{1, 3}, {1, 2}, {4, 3}}, {{1, 1}, {2, 1}} -> {{1, 
    3}, {1, 3}, {4, 1}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 3}, {4, 
    2}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 3}, {4, 3}}, {{1, 1}, {2, 
    1}} -> {{1, 3}, {2, 3}, {4, 3}}, {{1, 1}, {2, 1}} -> {{1, 3}, {3, 
    1}, {4, 1}}, {{1, 1}, {2, 1}} -> {{1, 3}, {3, 1}, {4, 2}}, {{1, 
    1}, {2, 1}} -> {{1, 3}, {3, 2}, {4, 2}}, {{1, 1}, {2, 1}} -> {{1, 
    3}, {3, 2}, {4, 3}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 1}, {4, 
    3}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 3}, {4, 1}}, {{1, 1}, {2, 
    1}} -> {{2, 3}, {2, 3}, {4, 2}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 
    3}, {4, 3}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 1}, {4, 1}}, {{1, 
    1}, {2, 1}} -> {{2, 3}, {3, 1}, {4, 3}}, {{1, 1}, {2, 1}} -> {{2, 
    3}, {3, 2}, {4, 1}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 2}, {4, 
    2}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 4}, {2, 1}}, {{1, 1}, {2, 
    1}} -> {{1, 3}, {1, 4}, {2, 3}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 
    4}, {3, 2}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 4}, {3, 4}}, {{1, 
    1}, {2, 1}} -> {{1, 3}, {3, 4}, {2, 3}}, {{1, 1}, {2, 1}} -> {{1, 
    3}, {3, 4}, {2, 4}}, {{1, 1}, {2, 1}} -> {{1, 3}, {3, 4}, {4, 
    1}}, {{1, 1}, {2, 1}} -> {{1, 3}, {3, 4}, {4, 2}}, {{1, 1}, {2, 
    1}} -> {{2, 3}, {2, 4}, {1, 2}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 
    4}, {1, 3}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 4}, {3, 1}}, {{1, 
    1}, {2, 1}} -> {{2, 3}, {2, 4}, {3, 4}}, {{1, 1}, {2, 1}} -> {{2, 
    3}, {3, 4}, {1, 4}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 4}, {4, 
    1}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 4}, {4, 2}}, {{1, 1}, {2, 
    1}} -> {{1, 3}, {1, 4}, {1, 5}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 
    4}, {2, 5}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 4}, {3, 5}}, {{1, 
    1}, {2, 1}} -> {{1, 3}, {3, 4}, {2, 5}}, {{1, 1}, {2, 1}} -> {{1, 
    3}, {3, 4}, {4, 5}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 4}, {1, 
    5}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 4}, {2, 5}}, {{1, 1}, {2, 
    1}} -> {{2, 3}, {2, 4}, {3, 5}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 
    4}, {1, 5}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 4}, {4, 5}}, {{1, 
    1}, {2, 1}} -> {{1, 3}, {1, 4}, {5, 1}}, {{1, 1}, {2, 1}} -> {{1, 
    3}, {1, 4}, {5, 2}}, {{1, 1}, {2, 1}} -> {{1, 3}, {1, 4}, {5, 
    3}}, {{1, 1}, {2, 1}} -> {{1, 3}, {3, 4}, {5, 2}}, {{1, 1}, {2, 
    1}} -> {{1, 3}, {3, 4}, {5, 3}}, {{1, 1}, {2, 1}} -> {{1, 3}, {3, 
    4}, {5, 4}}, {{1, 1}, {2, 1}} -> {{2, 3}, {2, 4}, {5, 1}}, {{1, 
    1}, {2, 1}} -> {{2, 3}, {2, 4}, {5, 2}}, {{1, 1}, {2, 1}} -> {{2, 
    3}, {2, 4}, {5, 3}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 4}, {5, 
    1}}, {{1, 1}, {2, 1}} -> {{2, 3}, {3, 4}, {5, 3}}, {{1, 1}, {2, 
    1}} -> {{2, 3}, {3, 4}, {5, 4}}, {{1, 1}, {2, 1}} -> {{1, 3}, {4, 
    3}, {2, 5}}, {{1, 1}, {2, 1}} -> {{2, 3}, {4, 3}, {1, 5}}, {{1, 
    1}, {2, 1}} -> {{1, 3}, {4, 3}, {5, 2}}, {{1, 1}, {2, 1}} -> {{1, 
    3}, {4, 3}, {5, 3}}, {{1, 1}, {2, 1}} -> {{2, 3}, {4, 3}, {5, 
    1}}, {{1, 1}, {2, 1}} -> {{2, 3}, {4, 3}, {5, 3}}, {{1, 1}, {2, 
    1}} -> {{3, 1}, {1, 3}, {2, 3}}, {{1, 1}, {2, 1}} -> {{3, 1}, {1, 
    3}, {3, 2}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 1}, {1, 2}}, {{1, 
    1}, {2, 1}} -> {{3, 1}, {3, 1}, {1, 3}}, {{1, 1}, {2, 1}} -> {{3, 
    1}, {3, 1}, {2, 1}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 1}, {2, 
    3}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 1}, {3, 1}}, {{1, 1}, {2, 
    1}} -> {{3, 1}, {3, 1}, {3, 2}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 
    2}, {1, 2}}, {{1, 1}, {2, 1}} -> {{3, 2}, {2, 3}, {1, 3}}, {{1, 
    1}, {2, 1}} -> {{3, 2}, {2, 3}, {3, 1}}, {{1, 1}, {2, 1}} -> {{3, 
    2}, {3, 1}, {2, 1}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 2}, {1, 
    2}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 2}, {1, 3}}, {{1, 1}, {2, 
    1}} -> {{3, 2}, {3, 2}, {2, 1}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 
    2}, {2, 3}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 2}, {3, 1}}, {{1, 
    1}, {2, 1}} -> {{3, 2}, {3, 2}, {3, 2}}, {{1, 1}, {2, 1}} -> {{3, 
    3}, {1, 3}, {1, 2}}, {{1, 1}, {2, 1}} -> {{3, 3}, {1, 3}, {1, 
    3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {1, 3}, {2, 1}}, {{1, 1}, {2, 
    1}} -> {{3, 3}, {1, 3}, {2, 2}}, {{1, 1}, {2, 1}} -> {{3, 3}, {1, 
    3}, {2, 3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {2, 3}, {1, 1}}, {{1, 
    1}, {2, 1}} -> {{3, 3}, {2, 3}, {1, 2}}, {{1, 1}, {2, 1}} -> {{3, 
    3}, {2, 3}, {2, 1}}, {{1, 1}, {2, 1}} -> {{3, 3}, {2, 3}, {2, 
    3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 1}, {1, 1}}, {{1, 1}, {2, 
    1}} -> {{3, 3}, {3, 1}, {1, 2}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 
    1}, {1, 3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 1}, {2, 1}}, {{1, 
    1}, {2, 1}} -> {{3, 3}, {3, 1}, {2, 2}}, {{1, 1}, {2, 1}} -> {{3, 
    3}, {3, 1}, {2, 3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 1}, {3, 
    1}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 1}, {3, 2}}, {{1, 1}, {2, 
    1}} -> {{3, 3}, {3, 2}, {1, 1}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 
    2}, {1, 2}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 2}, {1, 3}}, {{1, 
    1}, {2, 1}} -> {{3, 3}, {3, 2}, {2, 1}}, {{1, 1}, {2, 1}} -> {{3, 
    3}, {3, 2}, {2, 2}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 2}, {2, 
    3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 2}, {3, 2}}, {{1, 1}, {2, 
    1}} -> {{3, 3}, {3, 3}, {1, 3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 
    3}, {2, 3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 3}, {3, 1}}, {{1, 
    1}, {2, 1}} -> {{3, 3}, {3, 3}, {3, 2}}, {{1, 1}, {2, 1}} -> {{3, 
    1}, {1, 2}, {2, 4}}, {{1, 1}, {2, 1}} -> {{3, 1}, {1, 3}, {3, 
    4}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 1}, {1, 4}}, {{1, 1}, {2, 
    1}} -> {{3, 1}, {3, 1}, {2, 4}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 
    1}, {3, 4}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 2}, {1, 4}}, {{1, 
    1}, {2, 1}} -> {{3, 1}, {3, 2}, {3, 4}}, {{1, 1}, {2, 1}} -> {{3, 
    2}, {2, 1}, {1, 4}}, {{1, 1}, {2, 1}} -> {{3, 2}, {2, 3}, {3, 
    4}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 1}, {2, 4}}, {{1, 1}, {2, 
    1}} -> {{3, 2}, {3, 2}, {1, 4}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 
    2}, {2, 4}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 2}, {3, 4}}, {{1, 
    1}, {2, 1}} -> {{3, 3}, {1, 3}, {1, 4}}, {{1, 1}, {2, 1}} -> {{3, 
    3}, {1, 3}, {2, 4}}, {{1, 1}, {2, 1}} -> {{3, 3}, {2, 3}, {1, 
    4}}, {{1, 1}, {2, 1}} -> {{3, 3}, {2, 3}, {2, 4}}, {{1, 1}, {2, 
    1}} -> {{3, 3}, {3, 1}, {1, 4}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 
    1}, {2, 4}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 1}, {3, 4}}, {{1, 
    1}, {2, 1}} -> {{3, 3}, {3, 2}, {1, 4}}, {{1, 1}, {2, 1}} -> {{3, 
    3}, {3, 2}, {2, 4}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 2}, {3, 
    4}}, {{1, 1}, {2, 1}} -> {{3, 1}, {1, 2}, {4, 1}}, {{1, 1}, {2, 
    1}} -> {{3, 1}, {1, 2}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 1}, {1, 
    3}, {4, 3}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 1}, {4, 1}}, {{1, 
    1}, {2, 1}} -> {{3, 1}, {3, 1}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 
    1}, {3, 1}, {4, 3}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 2}, {4, 
    1}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 2}, {4, 3}}, {{1, 1}, {2, 
    1}} -> {{3, 2}, {2, 1}, {4, 1}}, {{1, 1}, {2, 1}} -> {{3, 2}, {2, 
    1}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 2}, {2, 3}, {4, 3}}, {{1, 
    1}, {2, 1}} -> {{3, 2}, {3, 1}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 
    2}, {3, 2}, {4, 1}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 2}, {4, 
    2}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 2}, {4, 3}}, {{1, 1}, {2, 
    1}} -> {{3, 3}, {1, 3}, {4, 1}}, {{1, 1}, {2, 1}} -> {{3, 3}, {1, 
    3}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 3}, {1, 3}, {4, 3}}, {{1, 
    1}, {2, 1}} -> {{3, 3}, {2, 3}, {4, 1}}, {{1, 1}, {2, 1}} -> {{3, 
    3}, {2, 3}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 3}, {2, 3}, {4, 
    3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 1}, {4, 1}}, {{1, 1}, {2, 
    1}} -> {{3, 3}, {3, 1}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 
    1}, {4, 3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 2}, {4, 1}}, {{1, 
    1}, {2, 1}} -> {{3, 3}, {3, 2}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 
    3}, {3, 2}, {4, 3}}, {{1, 1}, {2, 1}} -> {{3, 1}, {1, 4}, {2, 
    4}}, {{1, 1}, {2, 1}} -> {{3, 1}, {1, 4}, {4, 2}}, {{1, 1}, {2, 
    1}} -> {{3, 1}, {3, 4}, {1, 2}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 
    4}, {1, 4}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 4}, {2, 1}}, {{1, 
    1}, {2, 1}} -> {{3, 1}, {3, 4}, {2, 3}}, {{1, 1}, {2, 1}} -> {{3, 
    2}, {2, 4}, {1, 4}}, {{1, 1}, {2, 1}} -> {{3, 2}, {2, 4}, {4, 
    1}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 4}, {1, 2}}, {{1, 1}, {2, 
    1}} -> {{3, 2}, {3, 4}, {1, 3}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 
    4}, {2, 1}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 4}, {2, 4}}, {{1, 
    1}, {2, 1}} -> {{3, 3}, {3, 4}, {1, 3}}, {{1, 1}, {2, 1}} -> {{3, 
    3}, {3, 4}, {1, 4}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 4}, {2, 
    3}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 4}, {2, 4}}, {{1, 1}, {2, 
    1}} -> {{3, 3}, {3, 4}, {4, 1}}, {{1, 1}, {2, 1}} -> {{3, 3}, {3, 
    4}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 1}, {1, 4}, {2, 5}}, {{1, 
    1}, {2, 1}} -> {{3, 1}, {1, 4}, {4, 5}}, {{1, 1}, {2, 1}} -> {{3, 
    1}, {3, 4}, {1, 5}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 4}, {2, 
    5}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 4}, {3, 5}}, {{1, 1}, {2, 
    1}} -> {{3, 2}, {2, 4}, {1, 5}}, {{1, 1}, {2, 1}} -> {{3, 2}, {2, 
    4}, {4, 5}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 4}, {1, 5}}, {{1, 
    1}, {2, 1}} -> {{3, 2}, {3, 4}, {2, 5}}, {{1, 1}, {2, 1}} -> {{3, 
    2}, {3, 4}, {3, 5}}, {{1, 1}, {2, 1}} -> {{3, 1}, {1, 4}, {5, 
    1}}, {{1, 1}, {2, 1}} -> {{3, 1}, {1, 4}, {5, 2}}, {{1, 1}, {2, 
    1}} -> {{3, 1}, {1, 4}, {5, 4}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 
    4}, {5, 1}}, {{1, 1}, {2, 1}} -> {{3, 1}, {3, 4}, {5, 2}}, {{1, 
    1}, {2, 1}} -> {{3, 1}, {3, 4}, {5, 3}}, {{1, 1}, {2, 1}} -> {{3, 
    2}, {2, 4}, {5, 1}}, {{1, 1}, {2, 1}} -> {{3, 2}, {2, 4}, {5, 
    2}}, {{1, 1}, {2, 1}} -> {{3, 2}, {2, 4}, {5, 4}}, {{1, 1}, {2, 
    1}} -> {{3, 2}, {3, 4}, {5, 1}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 
    4}, {5, 2}}, {{1, 1}, {2, 1}} -> {{3, 2}, {3, 4}, {5, 3}}, {{1, 
    1}, {2, 1}} -> {{3, 3}, {4, 3}, {1, 4}}, {{1, 1}, {2, 1}} -> {{3, 
    3}, {4, 3}, {2, 4}}, {{1, 1}, {2, 1}} -> {{3, 3}, {4, 3}, {4, 
    1}}, {{1, 1}, {2, 1}} -> {{3, 3}, {4, 3}, {4, 2}}, {{1, 1}, {2, 
    1}} -> {{3, 1}, {4, 1}, {2, 5}}, {{1, 1}, {2, 1}} -> {{3, 2}, {4, 
    2}, {1, 5}}, {{1, 1}, {2, 1}} -> {{3, 1}, {4, 1}, {5, 1}}, {{1, 
    1}, {2, 1}} -> {{3, 1}, {4, 1}, {5, 2}}, {{1, 1}, {2, 1}} -> {{3, 
    2}, {4, 2}, {5, 1}}, {{1, 1}, {2, 1}} -> {{3, 2}, {4, 2}, {5, 
    2}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 1}, {2, 4}}, {{1, 1}, {2, 
    1}} -> {{3, 4}, {3, 1}, {4, 1}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 
    1}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 2}, {1, 4}}, {{1, 
    1}, {2, 1}} -> {{3, 4}, {3, 2}, {4, 1}}, {{1, 1}, {2, 1}} -> {{3, 
    4}, {3, 2}, {4, 2}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 4}, {1, 
    3}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 4}, {1, 4}}, {{1, 1}, {2, 
    1}} -> {{3, 4}, {3, 4}, {2, 3}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 
    4}, {2, 4}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 4}, {3, 1}}, {{1, 
    1}, {2, 1}} -> {{3, 4}, {3, 4}, {3, 2}}, {{1, 1}, {2, 1}} -> {{3, 
    4}, {3, 4}, {4, 1}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 4}, {4, 
    2}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 1}, {1, 2}}, {{1, 1}, {2, 
    1}} -> {{3, 4}, {4, 1}, {2, 1}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 
    2}, {1, 2}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 2}, {2, 1}}, {{1, 
    1}, {2, 1}} -> {{3, 4}, {4, 3}, {1, 3}}, {{1, 1}, {2, 1}} -> {{3, 
    4}, {4, 3}, {2, 3}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 3}, {3, 
    1}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 3}, {3, 2}}, {{1, 1}, {2, 
    1}} -> {{3, 4}, {3, 1}, {4, 5}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 
    2}, {4, 5}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 1}, {1, 5}}, {{1, 
    1}, {2, 1}} -> {{3, 4}, {4, 1}, {2, 5}}, {{1, 1}, {2, 1}} -> {{3, 
    4}, {4, 2}, {1, 5}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 2}, {2, 
    5}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 1}, {5, 4}}, {{1, 1}, {2, 
    1}} -> {{3, 4}, {3, 2}, {5, 4}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 
    1}, {5, 1}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 1}, {5, 2}}, {{1, 
    1}, {2, 1}} -> {{3, 4}, {4, 1}, {5, 4}}, {{1, 1}, {2, 1}} -> {{3, 
    4}, {4, 2}, {5, 1}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 2}, {5, 
    2}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 2}, {5, 4}}, {{1, 1}, {2, 
    1}} -> {{3, 4}, {3, 5}, {1, 3}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 
    5}, {1, 4}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 5}, {2, 3}}, {{1, 
    1}, {2, 1}} -> {{3, 4}, {3, 5}, {2, 4}}, {{1, 1}, {2, 1}} -> {{3, 
    4}, {3, 5}, {4, 1}}, {{1, 1}, {2, 1}} -> {{3, 4}, {3, 5}, {4, 
    2}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 5}, {1, 5}}, {{1, 1}, {2, 
    1}} -> {{3, 4}, {4, 5}, {2, 5}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 
    5}, {5, 1}}, {{1, 1}, {2, 1}} -> {{3, 4}, {4, 5}, {5, 2}}, {{1, 
    2}, {1, 2}} -> {{1, 1}, {1, 1}, {1, 1}}, {{1, 2}, {1, 2}} -> {{1, 
    1}, {1, 1}, {1, 2}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 1}, {2, 
    1}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 1}, {2, 2}}, {{1, 2}, {1, 
    2}} -> {{1, 1}, {1, 2}, {1, 2}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 
    2}, {2, 1}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 2}, {2, 2}}, {{1, 
    2}, {1, 2}} -> {{1, 1}, {2, 1}, {2, 1}}, {{1, 2}, {1, 2}} -> {{1, 
    2}, {1, 2}, {1, 2}}, {{1, 2}, {1, 2}} -> {{1, 2}, {1, 2}, {2, 
    1}}, {{1, 2}, {1, 2}} -> {{2, 1}, {2, 1}, {1, 2}}, {{1, 2}, {1, 
    2}} -> {{2, 1}, {2, 1}, {2, 1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {1, 
    2}, {1, 2}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 1}, {1, 1}}, {{1, 
    2}, {1, 2}} -> {{2, 2}, {2, 1}, {1, 2}}, {{1, 2}, {1, 2}} -> {{2, 
    2}, {2, 1}, {2, 1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 2}, {1, 
    1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 2}, {1, 2}}, {{1, 2}, {1, 
    2}} -> {{2, 2}, {2, 2}, {2, 1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 
    2}, {2, 2}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 1}, {1, 1}}, {{1, 
    2}, {2, 1}} -> {{1, 1}, {1, 1}, {1, 2}}, {{1, 2}, {2, 1}} -> {{1, 
    1}, {1, 1}, {2, 1}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 1}, {2, 
    2}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 2}, {1, 2}}, {{1, 2}, {2, 
    1}} -> {{1, 1}, {1, 2}, {2, 1}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 
    2}, {2, 2}}, {{1, 2}, {2, 1}} -> {{1, 1}, {2, 1}, {2, 1}}, {{1, 
    2}, {2, 1}} -> {{1, 2}, {1, 2}, {1, 2}}, {{1, 2}, {2, 1}} -> {{1, 
    2}, {1, 2}, {2, 1}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 1}, {1, 
    3}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 1}, {2, 3}}, {{1, 2}, {1, 
    2}} -> {{1, 1}, {1, 2}, {1, 3}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 
    2}, {2, 3}}, {{1, 2}, {1, 2}} -> {{1, 1}, {2, 1}, {2, 3}}, {{1, 
    2}, {1, 2}} -> {{1, 2}, {1, 2}, {1, 3}}, {{1, 2}, {1, 2}} -> {{1, 
    2}, {1, 2}, {2, 3}}, {{1, 2}, {1, 2}} -> {{1, 2}, {2, 1}, {1, 
    3}}, {{1, 2}, {1, 2}} -> {{2, 1}, {1, 2}, {2, 3}}, {{1, 2}, {1, 
    2}} -> {{2, 1}, {2, 1}, {1, 3}}, {{1, 2}, {1, 2}} -> {{2, 1}, {2, 
    1}, {2, 3}}, {{1, 2}, {1, 2}} -> {{2, 2}, {1, 2}, {1, 3}}, {{1, 
    2}, {1, 2}} -> {{2, 2}, {2, 1}, {1, 3}}, {{1, 2}, {1, 2}} -> {{2, 
    2}, {2, 1}, {2, 3}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 2}, {1, 
    3}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 2}, {2, 3}}, {{1, 2}, {2, 
    1}} -> {{1, 1}, {1, 1}, {1, 3}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 
    1}, {2, 3}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 2}, {1, 3}}, {{1, 
    2}, {2, 1}} -> {{1, 1}, {1, 2}, {2, 3}}, {{1, 2}, {2, 1}} -> {{1, 
    1}, {2, 1}, {2, 3}}, {{1, 2}, {2, 1}} -> {{1, 2}, {1, 2}, {1, 
    3}}, {{1, 2}, {2, 1}} -> {{1, 2}, {1, 2}, {2, 3}}, {{1, 2}, {2, 
    1}} -> {{1, 2}, {2, 1}, {1, 3}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 
    1}, {3, 1}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 1}, {3, 2}}, {{1, 
    2}, {1, 2}} -> {{1, 1}, {1, 2}, {3, 1}}, {{1, 2}, {1, 2}} -> {{1, 
    1}, {1, 2}, {3, 2}}, {{1, 2}, {1, 2}} -> {{1, 1}, {2, 1}, {3, 
    1}}, {{1, 2}, {1, 2}} -> {{1, 1}, {2, 1}, {3, 2}}, {{1, 2}, {1, 
    2}} -> {{1, 2}, {1, 2}, {3, 1}}, {{1, 2}, {1, 2}} -> {{1, 2}, {1, 
    2}, {3, 2}}, {{1, 2}, {1, 2}} -> {{1, 2}, {2, 1}, {3, 1}}, {{1, 
    2}, {1, 2}} -> {{2, 1}, {1, 2}, {3, 2}}, {{1, 2}, {1, 2}} -> {{2, 
    1}, {2, 1}, {3, 1}}, {{1, 2}, {1, 2}} -> {{2, 1}, {2, 1}, {3, 
    2}}, {{1, 2}, {1, 2}} -> {{2, 2}, {1, 2}, {3, 1}}, {{1, 2}, {1, 
    2}} -> {{2, 2}, {1, 2}, {3, 2}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 
    1}, {3, 1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 1}, {3, 2}}, {{1, 
    2}, {1, 2}} -> {{2, 2}, {2, 2}, {3, 1}}, {{1, 2}, {1, 2}} -> {{2, 
    2}, {2, 2}, {3, 2}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 1}, {3, 
    1}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 1}, {3, 2}}, {{1, 2}, {2, 
    1}} -> {{1, 1}, {1, 2}, {3, 1}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 
    2}, {3, 2}}, {{1, 2}, {2, 1}} -> {{1, 1}, {2, 1}, {3, 1}}, {{1, 
    2}, {2, 1}} -> {{1, 1}, {2, 1}, {3, 2}}, {{1, 2}, {2, 1}} -> {{1, 
    2}, {1, 2}, {3, 1}}, {{1, 2}, {2, 1}} -> {{1, 2}, {1, 2}, {3, 
    2}}, {{1, 2}, {2, 1}} -> {{1, 2}, {2, 1}, {3, 1}}, {{1, 2}, {1, 
    2}} -> {{1, 1}, {1, 3}, {1, 3}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 
    3}, {2, 1}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 3}, {2, 2}}, {{1, 
    2}, {1, 2}} -> {{1, 1}, {1, 3}, {2, 3}}, {{1, 2}, {1, 2}} -> {{1, 
    1}, {1, 3}, {3, 1}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 3}, {3, 
    2}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 3}, {3, 3}}, {{1, 2}, {1, 
    2}} -> {{1, 1}, {2, 3}, {2, 3}}, {{1, 2}, {1, 2}} -> {{1, 1}, {2, 
    3}, {3, 2}}, {{1, 2}, {1, 2}} -> {{1, 2}, {1, 3}, {2, 3}}, {{1, 
    2}, {1, 2}} -> {{1, 2}, {2, 3}, {3, 1}}, {{1, 2}, {1, 2}} -> {{2, 
    1}, {2, 3}, {1, 3}}, {{1, 2}, {1, 2}} -> {{2, 2}, {1, 3}, {1, 
    3}}, {{1, 2}, {1, 2}} -> {{2, 2}, {1, 3}, {3, 1}}, {{1, 2}, {1, 
    2}} -> {{2, 2}, {2, 3}, {1, 1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 
    3}, {1, 2}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 3}, {1, 3}}, {{1, 
    2}, {1, 2}} -> {{2, 2}, {2, 3}, {2, 3}}, {{1, 2}, {1, 2}} -> {{2, 
    2}, {2, 3}, {3, 1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 3}, {3, 
    2}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 3}, {3, 3}}, {{1, 2}, {2, 
    1}} -> {{1, 1}, {1, 3}, {1, 3}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 
    3}, {2, 1}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 3}, {2, 2}}, {{1, 
    2}, {2, 1}} -> {{1, 1}, {1, 3}, {2, 3}}, {{1, 2}, {2, 1}} -> {{1, 
    1}, {1, 3}, {3, 1}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 3}, {3, 
    2}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 3}, {3, 3}}, {{1, 2}, {2, 
    1}} -> {{1, 1}, {2, 3}, {2, 3}}, {{1, 2}, {2, 1}} -> {{1, 1}, {2, 
    3}, {3, 2}}, {{1, 2}, {2, 1}} -> {{1, 2}, {1, 3}, {2, 3}}, {{1, 
    2}, {2, 1}} -> {{1, 2}, {2, 3}, {3, 1}}, {{1, 2}, {1, 2}} -> {{1, 
    1}, {1, 3}, {1, 4}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 3}, {2, 
    4}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 3}, {3, 4}}, {{1, 2}, {1, 
    2}} -> {{1, 1}, {2, 3}, {2, 4}}, {{1, 2}, {1, 2}} -> {{1, 1}, {2, 
    3}, {3, 4}}, {{1, 2}, {1, 2}} -> {{1, 2}, {1, 3}, {1, 4}}, {{1, 
    2}, {1, 2}} -> {{1, 2}, {1, 3}, {2, 4}}, {{1, 2}, {1, 2}} -> {{1, 
    2}, {2, 3}, {3, 4}}, {{1, 2}, {1, 2}} -> {{2, 1}, {1, 3}, {3, 
    4}}, {{1, 2}, {1, 2}} -> {{2, 1}, {2, 3}, {1, 4}}, {{1, 2}, {1, 
    2}} -> {{2, 1}, {2, 3}, {2, 4}}, {{1, 2}, {1, 2}} -> {{2, 2}, {1, 
    3}, {1, 4}}, {{1, 2}, {1, 2}} -> {{2, 2}, {1, 3}, {3, 4}}, {{1, 
    2}, {1, 2}} -> {{2, 2}, {2, 3}, {1, 4}}, {{1, 2}, {1, 2}} -> {{2, 
    2}, {2, 3}, {2, 4}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 3}, {3, 
    4}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 3}, {1, 4}}, {{1, 2}, {2, 
    1}} -> {{1, 1}, {1, 3}, {2, 4}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 
    3}, {3, 4}}, {{1, 2}, {2, 1}} -> {{1, 1}, {2, 3}, {2, 4}}, {{1, 
    2}, {2, 1}} -> {{1, 1}, {2, 3}, {3, 4}}, {{1, 2}, {2, 1}} -> {{1, 
    2}, {1, 3}, {1, 4}}, {{1, 2}, {2, 1}} -> {{1, 2}, {1, 3}, {2, 
    4}}, {{1, 2}, {2, 1}} -> {{1, 2}, {2, 3}, {3, 4}}, {{1, 2}, {1, 
    2}} -> {{1, 1}, {1, 3}, {4, 1}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 
    3}, {4, 2}}, {{1, 2}, {1, 2}} -> {{1, 1}, {1, 3}, {4, 3}}, {{1, 
    2}, {1, 2}} -> {{1, 1}, {2, 3}, {4, 3}}, {{1, 2}, {1, 2}} -> {{1, 
    2}, {1, 3}, {4, 1}}, {{1, 2}, {1, 2}} -> {{1, 2}, {1, 3}, {4, 
    2}}, {{1, 2}, {1, 2}} -> {{1, 2}, {2, 3}, {4, 2}}, {{1, 2}, {1, 
    2}} -> {{1, 2}, {2, 3}, {4, 3}}, {{1, 2}, {1, 2}} -> {{2, 1}, {1, 
    3}, {4, 1}}, {{1, 2}, {1, 2}} -> {{2, 1}, {1, 3}, {4, 3}}, {{1, 
    2}, {1, 2}} -> {{2, 1}, {2, 3}, {4, 1}}, {{1, 2}, {1, 2}} -> {{2, 
    1}, {2, 3}, {4, 2}}, {{1, 2}, {1, 2}} -> {{2, 2}, {1, 3}, {4, 
    3}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 3}, {4, 1}}, {{1, 2}, {1, 
    2}} -> {{2, 2}, {2, 3}, {4, 2}}, {{1, 2}, {1, 2}} -> {{2, 2}, {2, 
    3}, {4, 3}}, {{1, 2}, {2, 1}} -> {{1, 1}, {1, 3}, {4, 1}}, {{1, 
    2}, {2, 1}} -> {{1, 1}, {1, 3}, {4, 2}}, {{1, 2}, {2, 1}} -> {{1, 
    1}, {1, 3}, {4, 3}}, {{1, 2}, {2, 1}} -> {{1, 1}, {2, 3}, {4, 
    3}}, {{1, 2}, {2, 1}} -> {{1, 2}, {1, 3}, {4, 1}}, {{1, 2}, {2, 
    1}} -> {{1, 2}, {1, 3}, {4, 2}}, {{1, 2}, {2, 1}} -> {{1, 2}, {2, 
    3}, {4, 2}}, {{1, 2}, {2, 1}} -> {{1, 2}, {2, 3}, {4, 3}}, {{1, 
    2}, {1, 2}} -> {{1, 1}, {3, 1}, {2, 2}}, {{1, 2}, {1, 2}} -> {{1, 
    1}, {3, 1}, {2, 3}}, {{1, 2}, {1, 2}} -> {{1, 1}, {3, 1}, {3, 
    1}}, {{1, 2}, {1, 2}} -> {{1, 1}, {3, 1}, {3, 2}}, {{1, 2}, {1, 
    2}} -> {{1, 1}, {3, 2}, {3, 2}}, {{1, 2}, {1, 2}} -> {{2, 2}, {3, 
    1}, {3, 1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {3, 2}, {1, 1}}, {{1, 
    2}, {1, 2}} -> {{2, 2}, {3, 2}, {1, 3}}, {{1, 2}, {1, 2}} -> {{2, 
    2}, {3, 2}, {3, 1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {3, 2}, {3, 
    2}}, {{1, 2}, {2, 1}} -> {{1, 1}, {3, 1}, {2, 2}}, {{1, 2}, {2, 
    1}} -> {{1, 1}, {3, 1}, {2, 3}}, {{1, 2}, {2, 1}} -> {{1, 1}, {3, 
    1}, {3, 1}}, {{1, 2}, {2, 1}} -> {{1, 1}, {3, 1}, {3, 2}}, {{1, 
    2}, {2, 1}} -> {{1, 1}, {3, 2}, {3, 2}}, {{1, 2}, {1, 2}} -> {{1, 
    1}, {3, 1}, {2, 4}}, {{1, 2}, {1, 2}} -> {{1, 1}, {3, 1}, {3, 
    4}}, {{1, 2}, {1, 2}} -> {{1, 1}, {3, 2}, {2, 4}}, {{1, 2}, {1, 
    2}} -> {{1, 1}, {3, 2}, {3, 4}}, {{1, 2}, {1, 2}} -> {{2, 2}, {3, 
    1}, {1, 4}}, {{1, 2}, {1, 2}} -> {{2, 2}, {3, 1}, {3, 4}}, {{1, 
    2}, {1, 2}} -> {{2, 2}, {3, 2}, {1, 4}}, {{1, 2}, {1, 2}} -> {{2, 
    2}, {3, 2}, {3, 4}}, {{1, 2}, {2, 1}} -> {{1, 1}, {3, 1}, {2, 
    4}}, {{1, 2}, {2, 1}} -> {{1, 1}, {3, 1}, {3, 4}}, {{1, 2}, {2, 
    1}} -> {{1, 1}, {3, 2}, {2, 4}}, {{1, 2}, {2, 1}} -> {{1, 1}, {3, 
    2}, {3, 4}}, {{1, 2}, {1, 2}} -> {{1, 1}, {3, 1}, {4, 1}}, {{1, 
    2}, {1, 2}} -> {{1, 1}, {3, 1}, {4, 2}}, {{1, 2}, {1, 2}} -> {{1, 
    1}, {3, 1}, {4, 3}}, {{1, 2}, {1, 2}} -> {{1, 1}, {3, 2}, {4, 
    2}}, {{1, 2}, {1, 2}} -> {{1, 2}, {3, 2}, {4, 2}}, {{1, 2}, {1, 
    2}} -> {{2, 1}, {3, 1}, {4, 1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {3, 
    1}, {4, 1}}, {{1, 2}, {1, 2}} -> {{2, 2}, {3, 2}, {4, 1}}, {{1, 
    2}, {1, 2}} -> {{2, 2}, {3, 2}, {4, 2}}, {{1, 2}, {1, 2}} -> {{2, 
    2}, {3, 2}, {4, 3}}, {{1, 2}, {2, 1}} -> {{1, 1}, {3, 1}, {4, 
    1}}, {{1, 2}, {2, 1}} -> {{1, 1}, {3, 1}, {4, 2}}, {{1, 2}, {2, 
    1}} -> {{1, 1}, {3, 1}, {4, 3}}, {{1, 2}, {2, 1}} -> {{1, 1}, {3, 
    2}, {4, 2}}, {{1, 2}, {2, 1}} -> {{1, 2}, {3, 2}, {4, 2}}, {{1, 
    2}, {1, 2}} -> {{1, 1}, {3, 4}, {4, 2}}, {{1, 2}, {1, 2}} -> {{2, 
    2}, {3, 4}, {4, 1}}, {{1, 2}, {2, 1}} -> {{1, 1}, {3, 4}, {4, 
    2}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 2}, {3, 2}}, {{1, 2}, {1, 
    2}} -> {{1, 3}, {1, 3}, {1, 2}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 
    3}, {1, 3}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 3}, {2, 1}}, {{1, 
    2}, {1, 2}} -> {{1, 3}, {1, 3}, {2, 3}}, {{1, 2}, {1, 2}} -> {{1, 
    3}, {1, 3}, {3, 1}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 3}, {3, 
    2}}, {{1, 2}, {1, 2}} -> {{1, 3}, {3, 1}, {1, 2}}, {{1, 2}, {1, 
    2}} -> {{1, 3}, {3, 1}, {2, 1}}, {{1, 2}, {1, 2}} -> {{1, 3}, {3, 
    2}, {2, 1}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 1}, {3, 1}}, {{1, 
    2}, {1, 2}} -> {{2, 3}, {2, 3}, {1, 2}}, {{1, 2}, {1, 2}} -> {{2, 
    3}, {2, 3}, {1, 3}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 3}, {2, 
    1}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 3}, {2, 3}}, {{1, 2}, {1, 
    2}} -> {{2, 3}, {2, 3}, {3, 1}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 
    3}, {3, 2}}, {{1, 2}, {1, 2}} -> {{2, 3}, {3, 2}, {1, 2}}, {{1, 
    2}, {1, 2}} -> {{2, 3}, {3, 2}, {2, 1}}, {{1, 2}, {2, 1}} -> {{1, 
    3}, {1, 2}, {3, 2}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 3}, {1, 
    2}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 3}, {1, 3}}, {{1, 2}, {2, 
    1}} -> {{1, 3}, {1, 3}, {2, 1}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 
    3}, {2, 3}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 3}, {3, 1}}, {{1, 
    2}, {2, 1}} -> {{1, 3}, {1, 3}, {3, 2}}, {{1, 2}, {2, 1}} -> {{1, 
    3}, {3, 1}, {1, 2}}, {{1, 2}, {2, 1}} -> {{1, 3}, {3, 1}, {2, 
    1}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 2}, {3, 4}}, {{1, 2}, {1, 
    2}} -> {{1, 3}, {1, 3}, {1, 4}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 
    3}, {2, 4}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 3}, {3, 4}}, {{1, 
    2}, {1, 2}} -> {{1, 3}, {3, 1}, {1, 4}}, {{1, 2}, {1, 2}} -> {{1, 
    3}, {3, 1}, {2, 4}}, {{1, 2}, {1, 2}} -> {{1, 3}, {3, 2}, {2, 
    4}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 1}, {3, 4}}, {{1, 2}, {1, 
    2}} -> {{2, 3}, {2, 3}, {1, 4}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 
    3}, {2, 4}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 3}, {3, 4}}, {{1, 
    2}, {1, 2}} -> {{2, 3}, {3, 1}, {1, 4}}, {{1, 2}, {1, 2}} -> {{2, 
    3}, {3, 2}, {1, 4}}, {{1, 2}, {1, 2}} -> {{2, 3}, {3, 2}, {2, 
    4}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 2}, {3, 4}}, {{1, 2}, {2, 
    1}} -> {{1, 3}, {1, 3}, {1, 4}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 
    3}, {2, 4}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 3}, {3, 4}}, {{1, 
    2}, {2, 1}} -> {{1, 3}, {3, 1}, {1, 4}}, {{1, 2}, {2, 1}} -> {{1, 
    3}, {3, 1}, {2, 4}}, {{1, 2}, {2, 1}} -> {{1, 3}, {3, 2}, {2, 
    4}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 2}, {4, 3}}, {{1, 2}, {1, 
    2}} -> {{1, 3}, {1, 3}, {4, 1}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 
    3}, {4, 2}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 3}, {4, 3}}, {{1, 
    2}, {1, 2}} -> {{1, 3}, {2, 3}, {4, 3}}, {{1, 2}, {1, 2}} -> {{1, 
    3}, {3, 1}, {4, 1}}, {{1, 2}, {1, 2}} -> {{1, 3}, {3, 1}, {4, 
    2}}, {{1, 2}, {1, 2}} -> {{1, 3}, {3, 2}, {4, 2}}, {{1, 2}, {1, 
    2}} -> {{1, 3}, {3, 2}, {4, 3}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 
    1}, {4, 3}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 3}, {4, 1}}, {{1, 
    2}, {1, 2}} -> {{2, 3}, {2, 3}, {4, 2}}, {{1, 2}, {1, 2}} -> {{2, 
    3}, {2, 3}, {4, 3}}, {{1, 2}, {1, 2}} -> {{2, 3}, {3, 1}, {4, 
    1}}, {{1, 2}, {1, 2}} -> {{2, 3}, {3, 1}, {4, 3}}, {{1, 2}, {1, 
    2}} -> {{2, 3}, {3, 2}, {4, 1}}, {{1, 2}, {1, 2}} -> {{2, 3}, {3, 
    2}, {4, 2}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 2}, {4, 3}}, {{1, 
    2}, {2, 1}} -> {{1, 3}, {1, 3}, {4, 1}}, {{1, 2}, {2, 1}} -> {{1, 
    3}, {1, 3}, {4, 2}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 3}, {4, 
    3}}, {{1, 2}, {2, 1}} -> {{1, 3}, {2, 3}, {4, 3}}, {{1, 2}, {2, 
    1}} -> {{1, 3}, {3, 1}, {4, 1}}, {{1, 2}, {2, 1}} -> {{1, 3}, {3, 
    1}, {4, 2}}, {{1, 2}, {2, 1}} -> {{1, 3}, {3, 2}, {4, 2}}, {{1, 
    2}, {2, 1}} -> {{1, 3}, {3, 2}, {4, 3}}, {{1, 2}, {1, 2}} -> {{1, 
    3}, {1, 4}, {2, 1}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 4}, {2, 
    3}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 4}, {3, 2}}, {{1, 2}, {1, 
    2}} -> {{1, 3}, {1, 4}, {3, 4}}, {{1, 2}, {1, 2}} -> {{1, 3}, {3, 
    4}, {2, 3}}, {{1, 2}, {1, 2}} -> {{1, 3}, {3, 4}, {2, 4}}, {{1, 
    2}, {1, 2}} -> {{1, 3}, {3, 4}, {4, 1}}, {{1, 2}, {1, 2}} -> {{1, 
    3}, {3, 4}, {4, 2}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 4}, {1, 
    2}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 4}, {1, 3}}, {{1, 2}, {1, 
    2}} -> {{2, 3}, {2, 4}, {3, 1}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 
    4}, {3, 4}}, {{1, 2}, {1, 2}} -> {{2, 3}, {3, 4}, {1, 4}}, {{1, 
    2}, {1, 2}} -> {{2, 3}, {3, 4}, {4, 1}}, {{1, 2}, {1, 2}} -> {{2, 
    3}, {3, 4}, {4, 2}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 4}, {2, 
    1}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 4}, {2, 3}}, {{1, 2}, {2, 
    1}} -> {{1, 3}, {1, 4}, {3, 2}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 
    4}, {3, 4}}, {{1, 2}, {2, 1}} -> {{1, 3}, {3, 4}, {2, 3}}, {{1, 
    2}, {2, 1}} -> {{1, 3}, {3, 4}, {2, 4}}, {{1, 2}, {2, 1}} -> {{1, 
    3}, {3, 4}, {4, 1}}, {{1, 2}, {2, 1}} -> {{1, 3}, {3, 4}, {4, 
    2}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 4}, {1, 5}}, {{1, 2}, {1, 
    2}} -> {{1, 3}, {1, 4}, {2, 5}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 
    4}, {3, 5}}, {{1, 2}, {1, 2}} -> {{1, 3}, {3, 4}, {2, 5}}, {{1, 
    2}, {1, 2}} -> {{1, 3}, {3, 4}, {4, 5}}, {{1, 2}, {1, 2}} -> {{2, 
    3}, {2, 4}, {1, 5}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 4}, {2, 
    5}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 4}, {3, 5}}, {{1, 2}, {1, 
    2}} -> {{2, 3}, {3, 4}, {1, 5}}, {{1, 2}, {1, 2}} -> {{2, 3}, {3, 
    4}, {4, 5}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 4}, {1, 5}}, {{1, 
    2}, {2, 1}} -> {{1, 3}, {1, 4}, {2, 5}}, {{1, 2}, {2, 1}} -> {{1, 
    3}, {1, 4}, {3, 5}}, {{1, 2}, {2, 1}} -> {{1, 3}, {3, 4}, {2, 
    5}}, {{1, 2}, {2, 1}} -> {{1, 3}, {3, 4}, {4, 5}}, {{1, 2}, {1, 
    2}} -> {{1, 3}, {1, 4}, {5, 1}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 
    4}, {5, 2}}, {{1, 2}, {1, 2}} -> {{1, 3}, {1, 4}, {5, 3}}, {{1, 
    2}, {1, 2}} -> {{1, 3}, {3, 4}, {5, 2}}, {{1, 2}, {1, 2}} -> {{1, 
    3}, {3, 4}, {5, 3}}, {{1, 2}, {1, 2}} -> {{1, 3}, {3, 4}, {5, 
    4}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 4}, {5, 1}}, {{1, 2}, {1, 
    2}} -> {{2, 3}, {2, 4}, {5, 2}}, {{1, 2}, {1, 2}} -> {{2, 3}, {2, 
    4}, {5, 3}}, {{1, 2}, {1, 2}} -> {{2, 3}, {3, 4}, {5, 1}}, {{1, 
    2}, {1, 2}} -> {{2, 3}, {3, 4}, {5, 3}}, {{1, 2}, {1, 2}} -> {{2, 
    3}, {3, 4}, {5, 4}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 4}, {5, 
    1}}, {{1, 2}, {2, 1}} -> {{1, 3}, {1, 4}, {5, 2}}, {{1, 2}, {2, 
    1}} -> {{1, 3}, {1, 4}, {5, 3}}, {{1, 2}, {2, 1}} -> {{1, 3}, {3, 
    4}, {5, 2}}, {{1, 2}, {2, 1}} -> {{1, 3}, {3, 4}, {5, 3}}, {{1, 
    2}, {2, 1}} -> {{1, 3}, {3, 4}, {5, 4}}, {{1, 2}, {1, 2}} -> {{1, 
    3}, {4, 3}, {2, 5}}, {{1, 2}, {1, 2}} -> {{2, 3}, {4, 3}, {1, 
    5}}, {{1, 2}, {2, 1}} -> {{1, 3}, {4, 3}, {2, 5}}, {{1, 2}, {1, 
    2}} -> {{1, 3}, {4, 3}, {5, 2}}, {{1, 2}, {1, 2}} -> {{1, 3}, {4, 
    3}, {5, 3}}, {{1, 2}, {1, 2}} -> {{2, 3}, {4, 3}, {5, 1}}, {{1, 
    2}, {1, 2}} -> {{2, 3}, {4, 3}, {5, 3}}, {{1, 2}, {2, 1}} -> {{1, 
    3}, {4, 3}, {5, 2}}, {{1, 2}, {2, 1}} -> {{1, 3}, {4, 3}, {5, 
    3}}, {{1, 2}, {1, 2}} -> {{3, 1}, {1, 3}, {2, 3}}, {{1, 2}, {1, 
    2}} -> {{3, 1}, {1, 3}, {3, 2}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 
    1}, {1, 2}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 1}, {1, 3}}, {{1, 
    2}, {1, 2}} -> {{3, 1}, {3, 1}, {2, 1}}, {{1, 2}, {1, 2}} -> {{3, 
    1}, {3, 1}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 1}, {3, 
    1}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 1}, {3, 2}}, {{1, 2}, {1, 
    2}} -> {{3, 1}, {3, 2}, {1, 2}}, {{1, 2}, {1, 2}} -> {{3, 2}, {2, 
    3}, {1, 3}}, {{1, 2}, {1, 2}} -> {{3, 2}, {2, 3}, {3, 1}}, {{1, 
    2}, {1, 2}} -> {{3, 2}, {3, 1}, {2, 1}}, {{1, 2}, {1, 2}} -> {{3, 
    2}, {3, 2}, {1, 2}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 2}, {1, 
    3}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 2}, {2, 1}}, {{1, 2}, {1, 
    2}} -> {{3, 2}, {3, 2}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 
    2}, {3, 1}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 2}, {3, 2}}, {{1, 
    2}, {1, 2}} -> {{3, 3}, {1, 3}, {1, 2}}, {{1, 2}, {1, 2}} -> {{3, 
    3}, {1, 3}, {1, 3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {1, 3}, {2, 
    1}}, {{1, 2}, {1, 2}} -> {{3, 3}, {1, 3}, {2, 2}}, {{1, 2}, {1, 
    2}} -> {{3, 3}, {1, 3}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {2, 
    3}, {1, 1}}, {{1, 2}, {1, 2}} -> {{3, 3}, {2, 3}, {1, 2}}, {{1, 
    2}, {1, 2}} -> {{3, 3}, {2, 3}, {2, 1}}, {{1, 2}, {1, 2}} -> {{3, 
    3}, {2, 3}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 1}, {1, 
    1}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 1}, {1, 2}}, {{1, 2}, {1, 
    2}} -> {{3, 3}, {3, 1}, {1, 3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 
    1}, {2, 1}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 1}, {2, 2}}, {{1, 
    2}, {1, 2}} -> {{3, 3}, {3, 1}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 
    3}, {3, 1}, {3, 1}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 1}, {3, 
    2}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 2}, {1, 1}}, {{1, 2}, {1, 
    2}} -> {{3, 3}, {3, 2}, {1, 2}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 
    2}, {1, 3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 2}, {2, 1}}, {{1, 
    2}, {1, 2}} -> {{3, 3}, {3, 2}, {2, 2}}, {{1, 2}, {1, 2}} -> {{3, 
    3}, {3, 2}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 2}, {3, 
    2}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 3}, {1, 3}}, {{1, 2}, {1, 
    2}} -> {{3, 3}, {3, 3}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 
    3}, {3, 1}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 3}, {3, 2}}, {{1, 
    2}, {2, 1}} -> {{3, 1}, {1, 3}, {2, 3}}, {{1, 2}, {2, 1}} -> {{3, 
    1}, {1, 3}, {3, 2}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 1}, {1, 
    2}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 1}, {1, 3}}, {{1, 2}, {2, 
    1}} -> {{3, 1}, {3, 1}, {2, 1}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 
    1}, {2, 3}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 1}, {3, 1}}, {{1, 
    2}, {2, 1}} -> {{3, 1}, {3, 1}, {3, 2}}, {{1, 2}, {2, 1}} -> {{3, 
    1}, {3, 2}, {1, 2}}, {{1, 2}, {2, 1}} -> {{3, 3}, {1, 3}, {1, 
    2}}, {{1, 2}, {2, 1}} -> {{3, 3}, {1, 3}, {1, 3}}, {{1, 2}, {2, 
    1}} -> {{3, 3}, {1, 3}, {2, 1}}, {{1, 2}, {2, 1}} -> {{3, 3}, {1, 
    3}, {2, 2}}, {{1, 2}, {2, 1}} -> {{3, 3}, {1, 3}, {2, 3}}, {{1, 
    2}, {2, 1}} -> {{3, 3}, {3, 1}, {1, 1}}, {{1, 2}, {2, 1}} -> {{3, 
    3}, {3, 1}, {1, 2}}, {{1, 2}, {2, 1}} -> {{3, 3}, {3, 1}, {1, 
    3}}, {{1, 2}, {2, 1}} -> {{3, 3}, {3, 1}, {2, 1}}, {{1, 2}, {2, 
    1}} -> {{3, 3}, {3, 1}, {2, 2}}, {{1, 2}, {2, 1}} -> {{3, 3}, {3, 
    1}, {2, 3}}, {{1, 2}, {2, 1}} -> {{3, 3}, {3, 1}, {3, 1}}, {{1, 
    2}, {2, 1}} -> {{3, 3}, {3, 1}, {3, 2}}, {{1, 2}, {2, 1}} -> {{3, 
    3}, {3, 3}, {1, 3}}, {{1, 2}, {2, 1}} -> {{3, 3}, {3, 3}, {3, 
    1}}, {{1, 2}, {1, 2}} -> {{3, 1}, {1, 2}, {2, 4}}, {{1, 2}, {1, 
    2}} -> {{3, 1}, {1, 3}, {3, 4}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 
    1}, {1, 4}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 1}, {2, 4}}, {{1, 
    2}, {1, 2}} -> {{3, 1}, {3, 1}, {3, 4}}, {{1, 2}, {1, 2}} -> {{3, 
    1}, {3, 2}, {1, 4}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 2}, {3, 
    4}}, {{1, 2}, {1, 2}} -> {{3, 2}, {2, 1}, {1, 4}}, {{1, 2}, {1, 
    2}} -> {{3, 2}, {2, 3}, {3, 4}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 
    1}, {2, 4}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 2}, {1, 4}}, {{1, 
    2}, {1, 2}} -> {{3, 2}, {3, 2}, {2, 4}}, {{1, 2}, {1, 2}} -> {{3, 
    2}, {3, 2}, {3, 4}}, {{1, 2}, {1, 2}} -> {{3, 3}, {1, 3}, {1, 
    4}}, {{1, 2}, {1, 2}} -> {{3, 3}, {1, 3}, {2, 4}}, {{1, 2}, {1, 
    2}} -> {{3, 3}, {2, 3}, {1, 4}}, {{1, 2}, {1, 2}} -> {{3, 3}, {2, 
    3}, {2, 4}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 1}, {1, 4}}, {{1, 
    2}, {1, 2}} -> {{3, 3}, {3, 1}, {2, 4}}, {{1, 2}, {1, 2}} -> {{3, 
    3}, {3, 1}, {3, 4}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 2}, {1, 
    4}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 2}, {2, 4}}, {{1, 2}, {1, 
    2}} -> {{3, 3}, {3, 2}, {3, 4}}, {{1, 2}, {2, 1}} -> {{3, 1}, {1, 
    2}, {2, 4}}, {{1, 2}, {2, 1}} -> {{3, 1}, {1, 3}, {3, 4}}, {{1, 
    2}, {2, 1}} -> {{3, 1}, {3, 1}, {1, 4}}, {{1, 2}, {2, 1}} -> {{3, 
    1}, {3, 1}, {2, 4}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 1}, {3, 
    4}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 2}, {1, 4}}, {{1, 2}, {2, 
    1}} -> {{3, 1}, {3, 2}, {3, 4}}, {{1, 2}, {2, 1}} -> {{3, 3}, {1, 
    3}, {1, 4}}, {{1, 2}, {2, 1}} -> {{3, 3}, {1, 3}, {2, 4}}, {{1, 
    2}, {2, 1}} -> {{3, 3}, {3, 1}, {1, 4}}, {{1, 2}, {2, 1}} -> {{3, 
    3}, {3, 1}, {2, 4}}, {{1, 2}, {2, 1}} -> {{3, 3}, {3, 1}, {3, 
    4}}, {{1, 2}, {1, 2}} -> {{3, 1}, {1, 2}, {4, 1}}, {{1, 2}, {1, 
    2}} -> {{3, 1}, {1, 2}, {4, 2}}, {{1, 2}, {1, 2}} -> {{3, 1}, {1, 
    3}, {4, 3}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 1}, {4, 1}}, {{1, 
    2}, {1, 2}} -> {{3, 1}, {3, 1}, {4, 2}}, {{1, 2}, {1, 2}} -> {{3, 
    1}, {3, 1}, {4, 3}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 2}, {4, 
    1}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 2}, {4, 3}}, {{1, 2}, {1, 
    2}} -> {{3, 2}, {2, 1}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 2}, {2, 
    1}, {4, 2}}, {{1, 2}, {1, 2}} -> {{3, 2}, {2, 3}, {4, 3}}, {{1, 
    2}, {1, 2}} -> {{3, 2}, {3, 1}, {4, 2}}, {{1, 2}, {1, 2}} -> {{3, 
    2}, {3, 2}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 2}, {4, 
    2}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 2}, {4, 3}}, {{1, 2}, {1, 
    2}} -> {{3, 3}, {1, 3}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 3}, {1, 
    3}, {4, 2}}, {{1, 2}, {1, 2}} -> {{3, 3}, {1, 3}, {4, 3}}, {{1, 
    2}, {1, 2}} -> {{3, 3}, {2, 3}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 
    3}, {2, 3}, {4, 2}}, {{1, 2}, {1, 2}} -> {{3, 3}, {2, 3}, {4, 
    3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 1}, {4, 1}}, {{1, 2}, {1, 
    2}} -> {{3, 3}, {3, 1}, {4, 2}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 
    1}, {4, 3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 2}, {4, 1}}, {{1, 
    2}, {1, 2}} -> {{3, 3}, {3, 2}, {4, 2}}, {{1, 2}, {1, 2}} -> {{3, 
    3}, {3, 2}, {4, 3}}, {{1, 2}, {2, 1}} -> {{3, 1}, {1, 2}, {4, 
    1}}, {{1, 2}, {2, 1}} -> {{3, 1}, {1, 2}, {4, 2}}, {{1, 2}, {2, 
    1}} -> {{3, 1}, {1, 3}, {4, 3}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 
    1}, {4, 1}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 1}, {4, 2}}, {{1, 
    2}, {2, 1}} -> {{3, 1}, {3, 1}, {4, 3}}, {{1, 2}, {2, 1}} -> {{3, 
    1}, {3, 2}, {4, 1}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 2}, {4, 
    3}}, {{1, 2}, {2, 1}} -> {{3, 3}, {1, 3}, {4, 1}}, {{1, 2}, {2, 
    1}} -> {{3, 3}, {1, 3}, {4, 2}}, {{1, 2}, {2, 1}} -> {{3, 3}, {1, 
    3}, {4, 3}}, {{1, 2}, {2, 1}} -> {{3, 3}, {3, 1}, {4, 1}}, {{1, 
    2}, {2, 1}} -> {{3, 3}, {3, 1}, {4, 2}}, {{1, 2}, {2, 1}} -> {{3, 
    3}, {3, 1}, {4, 3}}, {{1, 2}, {1, 2}} -> {{3, 1}, {1, 4}, {2, 
    4}}, {{1, 2}, {1, 2}} -> {{3, 1}, {1, 4}, {4, 2}}, {{1, 2}, {1, 
    2}} -> {{3, 1}, {3, 4}, {1, 2}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 
    4}, {1, 4}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 4}, {2, 1}}, {{1, 
    2}, {1, 2}} -> {{3, 1}, {3, 4}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 
    2}, {2, 4}, {1, 4}}, {{1, 2}, {1, 2}} -> {{3, 2}, {2, 4}, {4, 
    1}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 4}, {1, 2}}, {{1, 2}, {1, 
    2}} -> {{3, 2}, {3, 4}, {1, 3}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 
    4}, {2, 1}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 4}, {2, 4}}, {{1, 
    2}, {1, 2}} -> {{3, 3}, {3, 4}, {1, 3}}, {{1, 2}, {1, 2}} -> {{3, 
    3}, {3, 4}, {1, 4}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 4}, {2, 
    3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 4}, {2, 4}}, {{1, 2}, {1, 
    2}} -> {{3, 3}, {3, 4}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 3}, {3, 
    4}, {4, 2}}, {{1, 2}, {2, 1}} -> {{3, 1}, {1, 4}, {2, 4}}, {{1, 
    2}, {2, 1}} -> {{3, 1}, {1, 4}, {4, 2}}, {{1, 2}, {2, 1}} -> {{3, 
    1}, {3, 4}, {1, 2}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 4}, {1, 
    4}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 4}, {2, 1}}, {{1, 2}, {2, 
    1}} -> {{3, 1}, {3, 4}, {2, 3}}, {{1, 2}, {2, 1}} -> {{3, 3}, {3, 
    4}, {1, 3}}, {{1, 2}, {2, 1}} -> {{3, 3}, {3, 4}, {1, 4}}, {{1, 
    2}, {2, 1}} -> {{3, 3}, {3, 4}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 
    1}, {1, 4}, {2, 5}}, {{1, 2}, {1, 2}} -> {{3, 1}, {1, 4}, {4, 
    5}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 4}, {1, 5}}, {{1, 2}, {1, 
    2}} -> {{3, 1}, {3, 4}, {2, 5}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 
    4}, {3, 5}}, {{1, 2}, {1, 2}} -> {{3, 2}, {2, 4}, {1, 5}}, {{1, 
    2}, {1, 2}} -> {{3, 2}, {2, 4}, {4, 5}}, {{1, 2}, {1, 2}} -> {{3, 
    2}, {3, 4}, {1, 5}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 4}, {2, 
    5}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 4}, {3, 5}}, {{1, 2}, {2, 
    1}} -> {{3, 1}, {1, 4}, {2, 5}}, {{1, 2}, {2, 1}} -> {{3, 1}, {1, 
    4}, {4, 5}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 4}, {1, 5}}, {{1, 
    2}, {2, 1}} -> {{3, 1}, {3, 4}, {2, 5}}, {{1, 2}, {2, 1}} -> {{3, 
    1}, {3, 4}, {3, 5}}, {{1, 2}, {1, 2}} -> {{3, 1}, {1, 4}, {5, 
    1}}, {{1, 2}, {1, 2}} -> {{3, 1}, {1, 4}, {5, 2}}, {{1, 2}, {1, 
    2}} -> {{3, 1}, {1, 4}, {5, 4}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 
    4}, {5, 1}}, {{1, 2}, {1, 2}} -> {{3, 1}, {3, 4}, {5, 2}}, {{1, 
    2}, {1, 2}} -> {{3, 1}, {3, 4}, {5, 3}}, {{1, 2}, {1, 2}} -> {{3, 
    2}, {2, 4}, {5, 1}}, {{1, 2}, {1, 2}} -> {{3, 2}, {2, 4}, {5, 
    2}}, {{1, 2}, {1, 2}} -> {{3, 2}, {2, 4}, {5, 4}}, {{1, 2}, {1, 
    2}} -> {{3, 2}, {3, 4}, {5, 1}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 
    4}, {5, 2}}, {{1, 2}, {1, 2}} -> {{3, 2}, {3, 4}, {5, 3}}, {{1, 
    2}, {2, 1}} -> {{3, 1}, {1, 4}, {5, 1}}, {{1, 2}, {2, 1}} -> {{3, 
    1}, {1, 4}, {5, 2}}, {{1, 2}, {2, 1}} -> {{3, 1}, {1, 4}, {5, 
    4}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 4}, {5, 1}}, {{1, 2}, {2, 
    1}} -> {{3, 1}, {3, 4}, {5, 2}}, {{1, 2}, {2, 1}} -> {{3, 1}, {3, 
    4}, {5, 3}}, {{1, 2}, {1, 2}} -> {{3, 3}, {4, 3}, {1, 4}}, {{1, 
    2}, {1, 2}} -> {{3, 3}, {4, 3}, {2, 4}}, {{1, 2}, {1, 2}} -> {{3, 
    3}, {4, 3}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 3}, {4, 3}, {4, 
    2}}, {{1, 2}, {2, 1}} -> {{3, 3}, {4, 3}, {1, 4}}, {{1, 2}, {2, 
    1}} -> {{3, 3}, {4, 3}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 1}, {4, 
    1}, {2, 5}}, {{1, 2}, {1, 2}} -> {{3, 2}, {4, 2}, {1, 5}}, {{1, 
    2}, {2, 1}} -> {{3, 1}, {4, 1}, {2, 5}}, {{1, 2}, {1, 2}} -> {{3, 
    1}, {4, 1}, {5, 1}}, {{1, 2}, {1, 2}} -> {{3, 1}, {4, 1}, {5, 
    2}}, {{1, 2}, {1, 2}} -> {{3, 2}, {4, 2}, {5, 1}}, {{1, 2}, {1, 
    2}} -> {{3, 2}, {4, 2}, {5, 2}}, {{1, 2}, {2, 1}} -> {{3, 1}, {4, 
    1}, {5, 1}}, {{1, 2}, {2, 1}} -> {{3, 1}, {4, 1}, {5, 2}}, {{1, 
    2}, {1, 2}} -> {{3, 4}, {3, 1}, {2, 4}}, {{1, 2}, {1, 2}} -> {{3, 
    4}, {3, 1}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 1}, {4, 
    2}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 2}, {1, 4}}, {{1, 2}, {1, 
    2}} -> {{3, 4}, {3, 2}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 
    2}, {4, 2}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 4}, {1, 3}}, {{1, 
    2}, {1, 2}} -> {{3, 4}, {3, 4}, {1, 4}}, {{1, 2}, {1, 2}} -> {{3, 
    4}, {3, 4}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 4}, {2, 
    4}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 4}, {3, 1}}, {{1, 2}, {1, 
    2}} -> {{3, 4}, {3, 4}, {3, 2}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 
    4}, {4, 1}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 4}, {4, 2}}, {{1, 
    2}, {1, 2}} -> {{3, 4}, {4, 1}, {1, 2}}, {{1, 2}, {1, 2}} -> {{3, 
    4}, {4, 1}, {2, 1}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 2}, {1, 
    2}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 2}, {2, 1}}, {{1, 2}, {1, 
    2}} -> {{3, 4}, {4, 3}, {1, 3}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 
    3}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 3}, {3, 1}}, {{1, 
    2}, {1, 2}} -> {{3, 4}, {4, 3}, {3, 2}}, {{1, 2}, {2, 1}} -> {{3, 
    4}, {3, 1}, {2, 4}}, {{1, 2}, {2, 1}} -> {{3, 4}, {3, 1}, {4, 
    1}}, {{1, 2}, {2, 1}} -> {{3, 4}, {3, 1}, {4, 2}}, {{1, 2}, {2, 
    1}} -> {{3, 4}, {3, 4}, {1, 3}}, {{1, 2}, {2, 1}} -> {{3, 4}, {3, 
    4}, {1, 4}}, {{1, 2}, {2, 1}} -> {{3, 4}, {3, 4}, {3, 1}}, {{1, 
    2}, {2, 1}} -> {{3, 4}, {3, 4}, {4, 1}}, {{1, 2}, {2, 1}} -> {{3, 
    4}, {4, 1}, {1, 2}}, {{1, 2}, {2, 1}} -> {{3, 4}, {4, 1}, {2, 
    1}}, {{1, 2}, {2, 1}} -> {{3, 4}, {4, 3}, {1, 3}}, {{1, 2}, {2, 
    1}} -> {{3, 4}, {4, 3}, {3, 1}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 
    1}, {4, 5}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 2}, {4, 5}}, {{1, 
    2}, {1, 2}} -> {{3, 4}, {4, 1}, {1, 5}}, {{1, 2}, {1, 2}} -> {{3, 
    4}, {4, 1}, {2, 5}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 2}, {1, 
    5}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 2}, {2, 5}}, {{1, 2}, {2, 
    1}} -> {{3, 4}, {3, 1}, {4, 5}}, {{1, 2}, {2, 1}} -> {{3, 4}, {4, 
    1}, {1, 5}}, {{1, 2}, {2, 1}} -> {{3, 4}, {4, 1}, {2, 5}}, {{1, 
    2}, {1, 2}} -> {{3, 4}, {3, 1}, {5, 4}}, {{1, 2}, {1, 2}} -> {{3, 
    4}, {3, 2}, {5, 4}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 1}, {5, 
    1}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 1}, {5, 2}}, {{1, 2}, {1, 
    2}} -> {{3, 4}, {4, 1}, {5, 4}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 
    2}, {5, 1}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 2}, {5, 2}}, {{1, 
    2}, {1, 2}} -> {{3, 4}, {4, 2}, {5, 4}}, {{1, 2}, {2, 1}} -> {{3, 
    4}, {3, 1}, {5, 4}}, {{1, 2}, {2, 1}} -> {{3, 4}, {4, 1}, {5, 
    1}}, {{1, 2}, {2, 1}} -> {{3, 4}, {4, 1}, {5, 2}}, {{1, 2}, {2, 
    1}} -> {{3, 4}, {4, 1}, {5, 4}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 
    5}, {1, 3}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 5}, {1, 4}}, {{1, 
    2}, {1, 2}} -> {{3, 4}, {3, 5}, {2, 3}}, {{1, 2}, {1, 2}} -> {{3, 
    4}, {3, 5}, {2, 4}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 5}, {4, 
    1}}, {{1, 2}, {1, 2}} -> {{3, 4}, {3, 5}, {4, 2}}, {{1, 2}, {1, 
    2}} -> {{3, 4}, {4, 5}, {1, 5}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 
    5}, {2, 5}}, {{1, 2}, {1, 2}} -> {{3, 4}, {4, 5}, {5, 1}}, {{1, 
    2}, {1, 2}} -> {{3, 4}, {4, 5}, {5, 2}}, {{1, 2}, {2, 1}} -> {{3, 
    4}, {3, 5}, {1, 3}}, {{1, 2}, {2, 1}} -> {{3, 4}, {3, 5}, {1, 
    4}}, {{1, 2}, {2, 1}} -> {{3, 4}, {3, 5}, {4, 1}}, {{1, 2}, {2, 
    1}} -> {{3, 4}, {4, 5}, {1, 5}}, {{1, 2}, {2, 1}} -> {{3, 4}, {4, 
    5}, {5, 1}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 1}, {1, 1}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {1, 1}, {1, 2}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {1, 1}, {2, 1}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 1}, {2, 
    2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 1}, {2, 3}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {1, 2}, {1, 2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 
    2}, {1, 3}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 2}, {2, 1}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {1, 2}, {2, 2}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {1, 2}, {2, 3}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 2}, {3, 
    1}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 2}, {3, 2}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {1, 2}, {3, 3}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 
    1}, {2, 1}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 1}, {2, 3}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {2, 1}, {3, 1}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {2, 1}, {3, 2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 1}, {3, 
    3}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 2}, {3, 3}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {2, 3}, {2, 3}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 
    3}, {3, 2}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 2}, {1, 2}}, {{1, 
    2}, {1, 3}} -> {{1, 2}, {1, 2}, {1, 3}}, {{1, 2}, {1, 3}} -> {{1, 
    2}, {1, 2}, {2, 1}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 2}, {2, 
    3}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 2}, {3, 1}}, {{1, 2}, {1, 
    3}} -> {{1, 2}, {1, 2}, {3, 2}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 
    3}, {2, 3}}, {{1, 2}, {1, 3}} -> {{1, 2}, {2, 1}, {1, 3}}, {{1, 
    2}, {1, 3}} -> {{1, 2}, {2, 1}, {3, 1}}, {{1, 2}, {1, 3}} -> {{1, 
    2}, {2, 3}, {3, 1}}, {{1, 2}, {1, 3}} -> {{2, 1}, {1, 2}, {2, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 1}, {1, 2}, {3, 2}}, {{1, 2}, {1, 
    3}} -> {{2, 1}, {2, 1}, {1, 2}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 
    1}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 1}, {2, 1}}, {{1, 
    2}, {1, 3}} -> {{2, 1}, {2, 1}, {2, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    1}, {2, 1}, {3, 1}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 1}, {3, 
    2}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 3}, {1, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {1, 2}, {1, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 
    2}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 2}, {3, 1}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {1, 2}, {3, 2}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {1, 2}, {3, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 3}, {1, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 3}, {3, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {2, 1}, {1, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    1}, {1, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 1}, {1, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {2, 1}, {2, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {2, 1}, {2, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 1}, {3, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 1}, {3, 2}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {2, 1}, {3, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    2}, {1, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 2}, {1, 2}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {2, 2}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {2, 2}, {2, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 2}, {2, 
    2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 2}, {2, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {2, 2}, {3, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    2}, {3, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 2}, {3, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {2, 3}, {1, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {2, 3}, {1, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 3}, {1, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 3}, {2, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {2, 3}, {3, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    3}, {3, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 3}, {3, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {3, 1}, {3, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {3, 2}, {1, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 2}, {1, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 2}, {3, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {3, 2}, {3, 2}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 
    1}, {3, 1}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 3}, {1, 2}}, {{1, 
    2}, {1, 3}} -> {{2, 3}, {2, 3}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    3}, {2, 3}, {2, 1}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 3}, {2, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 3}, {3, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 3}, {2, 3}, {3, 2}}, {{1, 2}, {1, 3}} -> {{2, 3}, {3, 
    2}, {1, 2}}, {{1, 2}, {1, 3}} -> {{2, 3}, {3, 2}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {1, 1}, {1, 1}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {1, 1}, {1, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 1}, {1, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 1}, {2, 1}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {1, 1}, {2, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 
    1}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 1}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {1, 1}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {1, 1}, {3, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 2}, {1, 
    2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 2}, {1, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {1, 2}, {2, 1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 
    2}, {2, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 2}, {2, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {1, 2}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {1, 2}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 2}, {3, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 3}, {1, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {1, 3}, {2, 1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 
    3}, {2, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 3}, {2, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {1, 3}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {1, 3}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 3}, {3, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 1}, {2, 1}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {2, 1}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 
    1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 1}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {2, 1}, {3, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {2, 2}, {3, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 3}, {2, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 3}, {3, 2}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {3, 1}, {2, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 
    1}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 1}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {3, 1}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {3, 2}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 2}, {1, 
    2}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 2}, {1, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 2}, {1, 2}, {2, 1}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 
    2}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 2}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{1, 2}, {1, 2}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 
    2}, {1, 3}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 1}, {1, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 1}, {3, 1}}, {{1, 2}, {2, 
    3}} -> {{1, 2}, {2, 3}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 
    2}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 3}, {1, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 3}, {1, 3}, {1, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    3}, {1, 3}, {2, 1}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 3}, {2, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 3}, {3, 1}}, {{1, 2}, {2, 
    3}} -> {{1, 3}, {1, 3}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 
    1}, {1, 2}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 1}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{1, 3}, {3, 2}, {2, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    1}, {1, 2}, {2, 3}}, {{1, 2}, {2, 3}} -> {{2, 1}, {1, 2}, {3, 
    2}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 1}, {1, 2}}, {{1, 2}, {2, 
    3}} -> {{2, 1}, {2, 1}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 
    1}, {2, 1}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 1}, {2, 3}}, {{1, 
    2}, {2, 3}} -> {{2, 1}, {2, 1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    1}, {2, 1}, {3, 2}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 3}, {1, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 2}, {1, 2}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {1, 2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 
    2}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 2}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {1, 2}, {3, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {1, 3}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 3}, {3, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 1}, {1, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {2, 1}, {1, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    1}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 1}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {2, 1}, {2, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {2, 1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 1}, {3, 
    2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 1}, {3, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {2, 2}, {1, 1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    2}, {1, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 2}, {1, 3}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {2, 2}, {2, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {2, 2}, {2, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 2}, {2, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 2}, {3, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {2, 2}, {3, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    2}, {3, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 3}, {1, 1}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {2, 3}, {1, 2}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {2, 3}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 3}, {2, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 3}, {3, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {2, 3}, {3, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    3}, {3, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 1}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {3, 2}, {1, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {3, 2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 2}, {3, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 2}, {3, 2}}, {{1, 2}, {2, 
    3}} -> {{2, 3}, {2, 1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 
    3}, {1, 2}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 3}, {1, 3}}, {{1, 
    2}, {2, 3}} -> {{2, 3}, {2, 3}, {2, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    3}, {2, 3}, {2, 3}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 3}, {3, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 3}, {3, 2}}, {{1, 2}, {2, 
    3}} -> {{2, 3}, {3, 2}, {1, 2}}, {{1, 2}, {2, 3}} -> {{2, 3}, {3, 
    2}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 1}, {1, 3}, {2, 3}}, {{1, 
    2}, {2, 3}} -> {{3, 1}, {1, 3}, {3, 2}}, {{1, 2}, {2, 3}} -> {{3, 
    1}, {3, 1}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 1}, {1, 
    3}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 1}, {2, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 1}, {3, 1}, {2, 3}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 
    1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 1}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 1}, {3, 2}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 
    2}, {2, 3}, {1, 3}}, {{1, 2}, {2, 3}} -> {{3, 2}, {2, 3}, {3, 
    1}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 1}, {2, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 2}, {3, 2}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 
    2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 2}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{3, 2}, {3, 2}, {2, 3}}, {{1, 2}, {2, 3}} -> {{3, 
    2}, {3, 2}, {3, 1}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 2}, {3, 
    2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 2}, {1, 2}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {1, 2}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 
    3}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 3}, {1, 3}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {1, 3}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {1, 3}, {2, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 3}, {2, 
    3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 1}, {2, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {2, 3}, {1, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 
    3}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 3}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {2, 3}, {2, 3}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {3, 1}, {1, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 1}, {1, 
    2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 1}, {1, 3}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {3, 1}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 
    1}, {2, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 1}, {2, 3}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {3, 1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {3, 1}, {3, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 2}, {1, 
    1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 2}, {1, 2}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {3, 2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 
    2}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 2}, {2, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {3, 2}, {2, 3}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {3, 2}, {3, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 3}, {1, 
    1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 3}, {1, 2}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {3, 3}, {1, 3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 
    3}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 3}, {2, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {3, 3}, {2, 3}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {3, 3}, {3, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 3}, {3, 
    2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 3}, {3, 3}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {1, 1}, {1, 4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 
    1}, {2, 4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 2}, {1, 4}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {1, 2}, {2, 4}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {1, 2}, {3, 4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 1}, {2, 
    4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 1}, {3, 4}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {2, 2}, {3, 4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 
    3}, {2, 4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 3}, {3, 4}}, {{1, 
    2}, {1, 3}} -> {{1, 2}, {1, 2}, {1, 4}}, {{1, 2}, {1, 3}} -> {{1, 
    2}, {1, 2}, {2, 4}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 2}, {3, 
    4}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 3}, {1, 4}}, {{1, 2}, {1, 
    3}} -> {{1, 2}, {1, 3}, {2, 4}}, {{1, 2}, {1, 3}} -> {{1, 2}, {2, 
    1}, {1, 4}}, {{1, 2}, {1, 3}} -> {{1, 2}, {2, 1}, {3, 4}}, {{1, 
    2}, {1, 3}} -> {{1, 2}, {2, 3}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    1}, {1, 2}, {2, 4}}, {{1, 2}, {1, 3}} -> {{2, 1}, {1, 3}, {3, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 1}, {1, 4}}, {{1, 2}, {1, 
    3}} -> {{2, 1}, {2, 1}, {2, 4}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 
    1}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 3}, {1, 4}}, {{1, 
    2}, {1, 3}} -> {{2, 1}, {2, 3}, {2, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {1, 2}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 2}, {3, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 3}, {1, 4}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {1, 3}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    1}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 1}, {2, 4}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {2, 1}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {2, 2}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 2}, {2, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 2}, {3, 4}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {2, 3}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    3}, {2, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 3}, {3, 4}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {3, 1}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {3, 1}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 2}, {1, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 2}, {3, 4}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {3, 3}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 
    1}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 3}, {1, 4}}, {{1, 
    2}, {1, 3}} -> {{2, 3}, {2, 3}, {2, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    3}, {2, 3}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 3}, {3, 1}, {1, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 3}, {3, 2}, {1, 4}}, {{1, 2}, {1, 
    3}} -> {{2, 3}, {3, 2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 
    1}, {1, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 1}, {2, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {1, 1}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {1, 2}, {1, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 2}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 2}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {1, 3}, {1, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 
    3}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 3}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {2, 1}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {2, 1}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 2}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 3}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {2, 3}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 
    1}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 1}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {3, 2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {3, 2}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 3}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 2}, {1, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 2}, {1, 2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 
    2}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 3}, {1, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 2}, {1, 3}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 
    2}, {2, 1}, {1, 4}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 1}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 3}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 3}, {1, 2}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 
    3}, {1, 4}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 3}, {2, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 3}, {1, 3}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 
    3}, {3, 1}, {1, 4}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 1}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 2}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{2, 1}, {1, 2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{2, 1}, {1, 
    3}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 1}, {1, 4}}, {{1, 
    2}, {2, 3}} -> {{2, 1}, {2, 1}, {2, 4}}, {{1, 2}, {2, 3}} -> {{2, 
    1}, {2, 1}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 3}, {1, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 3}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {1, 2}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 
    2}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 3}, {1, 4}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {1, 3}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {2, 1}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 1}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 1}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {2, 2}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 2}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {2, 3}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {2, 3}, {2, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 3}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 1}, {1, 4}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {3, 1}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 
    2}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 2}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {3, 3}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 
    3}, {2, 1}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 3}, {1, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 3}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{2, 3}, {2, 3}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 3}, {3, 
    1}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 3}, {3, 2}, {1, 4}}, {{1, 
    2}, {2, 3}} -> {{2, 3}, {3, 2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 
    1}, {1, 2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 1}, {1, 3}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 1}, {1, 4}}, {{1, 2}, {2, 
    3}} -> {{3, 1}, {3, 1}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 
    1}, {3, 4}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 2}, {1, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 1}, {3, 2}, {3, 4}}, {{1, 2}, {2, 3}} -> {{3, 
    2}, {2, 1}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 2}, {2, 3}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 1}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{3, 2}, {3, 2}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 
    2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 2}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {1, 2}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {1, 2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 3}, {1, 
    4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 3}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {2, 1}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 
    1}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 3}, {1, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {2, 3}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {3, 1}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 1}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 1}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {3, 2}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 
    2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 2}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {3, 3}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {3, 3}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 3}, {3, 
    4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 1}, {4, 1}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {1, 1}, {4, 2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 
    2}, {4, 1}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 2}, {4, 2}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {1, 2}, {4, 3}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {2, 1}, {4, 1}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 1}, {4, 
    2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 1}, {4, 3}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {2, 2}, {4, 3}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 
    3}, {4, 3}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 2}, {4, 1}}, {{1, 
    2}, {1, 3}} -> {{1, 2}, {1, 2}, {4, 2}}, {{1, 2}, {1, 3}} -> {{1, 
    2}, {1, 2}, {4, 3}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 3}, {4, 
    1}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 3}, {4, 2}}, {{1, 2}, {1, 
    3}} -> {{1, 2}, {2, 1}, {4, 1}}, {{1, 2}, {1, 3}} -> {{1, 2}, {2, 
    1}, {4, 3}}, {{1, 2}, {1, 3}} -> {{1, 2}, {2, 3}, {4, 2}}, {{1, 
    2}, {1, 3}} -> {{1, 2}, {2, 3}, {4, 3}}, {{1, 2}, {1, 3}} -> {{1, 
    2}, {3, 2}, {4, 2}}, {{1, 2}, {1, 3}} -> {{2, 1}, {1, 2}, {4, 
    2}}, {{1, 2}, {1, 3}} -> {{2, 1}, {1, 3}, {4, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 1}, {1, 3}, {4, 3}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 
    1}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 1}, {4, 2}}, {{1, 
    2}, {1, 3}} -> {{2, 1}, {2, 1}, {4, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    1}, {2, 3}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 3}, {4, 
    2}}, {{1, 2}, {1, 3}} -> {{2, 1}, {3, 1}, {4, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {1, 2}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 
    2}, {4, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 2}, {4, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {1, 3}, {4, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {2, 1}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 1}, {4, 
    2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 1}, {4, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {2, 2}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    2}, {4, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 2}, {4, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {2, 3}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {2, 3}, {4, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 3}, {4, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 1}, {4, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {3, 2}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 
    2}, {4, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 2}, {4, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {3, 3}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    3}, {2, 1}, {4, 3}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 3}, {4, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 3}, {4, 2}}, {{1, 2}, {1, 
    3}} -> {{2, 3}, {2, 3}, {4, 3}}, {{1, 2}, {1, 3}} -> {{2, 3}, {3, 
    1}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 3}, {3, 1}, {4, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 3}, {3, 2}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    3}, {3, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 1}, {4, 
    1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 1}, {4, 2}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {1, 1}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 
    2}, {4, 1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 2}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {1, 2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {1, 3}, {4, 1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 3}, {4, 
    2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 3}, {4, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {2, 1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 
    1}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 1}, {4, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {2, 2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {2, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 1}, {4, 
    1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 1}, {4, 2}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {3, 1}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 
    2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 3}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 2}, {1, 2}, {4, 1}}, {{1, 2}, {2, 3}} -> {{1, 
    2}, {1, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 2}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 3}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{1, 2}, {1, 3}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 
    1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 1}, {4, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 2}, {2, 3}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 
    2}, {2, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 2}, {3, 2}, {4, 
    2}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 2}, {4, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 3}, {1, 3}, {4, 1}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 
    3}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 3}, {4, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 3}, {2, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    3}, {3, 1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 1}, {4, 
    2}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 2}, {4, 2}}, {{1, 2}, {2, 
    3}} -> {{1, 3}, {3, 2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{2, 1}, {1, 
    2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{2, 1}, {1, 3}, {4, 1}}, {{1, 
    2}, {2, 3}} -> {{2, 1}, {1, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    1}, {2, 1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 1}, {4, 
    2}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 1}, {4, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 1}, {2, 3}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 
    3}, {4, 2}}, {{1, 2}, {2, 3}} -> {{2, 1}, {3, 1}, {4, 1}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {1, 2}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {1, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 2}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 3}, {4, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {2, 1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    1}, {4, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 1}, {4, 3}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {2, 2}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {2, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 2}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 3}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {2, 3}, {4, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 1}, {4, 1}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {3, 2}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {3, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 2}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 3}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 3}, {2, 1}, {4, 3}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 
    3}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 3}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{2, 3}, {2, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    3}, {3, 1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 3}, {3, 1}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 3}, {3, 2}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 3}, {3, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 1}, {1, 
    2}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 1}, {1, 2}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 1}, {1, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{3, 
    1}, {3, 1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 1}, {4, 
    2}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 1}, {4, 3}}, {{1, 2}, {2, 
    3}} -> {{3, 1}, {3, 2}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 
    2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{3, 2}, {2, 1}, {4, 1}}, {{1, 
    2}, {2, 3}} -> {{3, 2}, {2, 1}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 
    2}, {2, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 1}, {4, 
    2}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 2}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 2}, {3, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 
    2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 2}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {1, 3}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {1, 3}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 3}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 1}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {2, 3}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 
    3}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 3}, {4, 3}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {3, 1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {3, 1}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 1}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 2}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {3, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 
    2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 3}, {4, 1}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {3, 3}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {3, 3}, {4, 3}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 4}, {1, 
    4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 4}, {2, 1}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {1, 4}, {2, 2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 
    4}, {2, 3}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 4}, {2, 4}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {1, 4}, {4, 1}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {1, 4}, {4, 2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 4}, {4, 
    4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 4}, {2, 4}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {2, 4}, {3, 4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 
    4}, {4, 2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 4}, {4, 3}}, {{1, 
    2}, {1, 3}} -> {{1, 2}, {1, 4}, {2, 3}}, {{1, 2}, {1, 3}} -> {{1, 
    2}, {1, 4}, {2, 4}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 4}, {3, 
    1}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 4}, {3, 2}}, {{1, 2}, {1, 
    3}} -> {{1, 2}, {2, 4}, {3, 2}}, {{1, 2}, {1, 3}} -> {{1, 2}, {2, 
    4}, {3, 4}}, {{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {4, 1}}, {{1, 
    2}, {1, 3}} -> {{1, 2}, {2, 4}, {4, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    1}, {1, 4}, {3, 1}}, {{1, 2}, {1, 3}} -> {{2, 1}, {1, 4}, {3, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 1}, {1, 4}, {4, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 1}, {2, 4}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 
    4}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 4}, {3, 1}}, {{1, 
    2}, {1, 3}} -> {{2, 1}, {2, 4}, {3, 2}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {1, 4}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 4}, {3, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 4}, {4, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {1, 4}, {4, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    4}, {1, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {1, 2}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {2, 4}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {2, 4}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {2, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {3, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {2, 4}, {3, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    4}, {3, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {3, 4}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {2, 4}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {2, 4}, {4, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {4, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {4, 4}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {3, 4}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 
    4}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 4}, {4, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 3}, {2, 4}, {1, 2}}, {{1, 2}, {1, 3}} -> {{2, 
    3}, {2, 4}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 4}, {3, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 4}, {3, 4}}, {{1, 2}, {1, 
    3}} -> {{2, 3}, {3, 4}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 3}, {3, 
    4}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 3}, {3, 4}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {1, 4}, {1, 4}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {1, 4}, {2, 1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 4}, {2, 
    2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 4}, {2, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {1, 4}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 
    4}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 4}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {1, 4}, {3, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {1, 4}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 4}, {4, 
    1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 4}, {4, 2}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {1, 4}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 
    4}, {4, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 4}, {2, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {2, 4}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {2, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 4}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 4}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {3, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 
    4}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 4}, {2, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 2}, {1, 4}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 
    2}, {1, 4}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 4}, {3, 
    2}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 4}, {3, 2}}, {{1, 2}, {2, 
    3}} -> {{1, 2}, {2, 4}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 
    4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 4}, {4, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 3}, {1, 4}, {2, 1}}, {{1, 2}, {2, 3}} -> {{1, 
    3}, {1, 4}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 4}, {3, 
    2}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 4}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 3}, {3, 4}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 
    4}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 4}, {4, 1}}, {{1, 
    2}, {2, 3}} -> {{1, 3}, {3, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{2, 
    1}, {1, 4}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 1}, {1, 4}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 1}, {1, 4}, {4, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 1}, {2, 4}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 
    4}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 4}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{2, 1}, {2, 4}, {3, 2}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {1, 4}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 4}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 4}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {1, 4}, {4, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    4}, {1, 1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 4}, {1, 2}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {2, 4}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {2, 4}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 4}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 4}, {3, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {2, 4}, {3, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    4}, {3, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 4}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {2, 4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {2, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 4}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 4}, {4, 4}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {3, 4}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 
    4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 4}, {4, 3}}, {{1, 
    2}, {2, 3}} -> {{2, 3}, {2, 4}, {1, 2}}, {{1, 2}, {2, 3}} -> {{2, 
    3}, {2, 4}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 4}, {3, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 4}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{2, 3}, {3, 4}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 3}, {3, 
    4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 3}, {3, 4}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 1}, {1, 4}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 
    1}, {1, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 4}, {1, 
    2}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 4}, {1, 4}}, {{1, 2}, {2, 
    3}} -> {{3, 1}, {3, 4}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 
    4}, {2, 3}}, {{1, 2}, {2, 3}} -> {{3, 2}, {2, 4}, {1, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 2}, {2, 4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    2}, {3, 4}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 4}, {1, 
    3}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 4}, {2, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 2}, {3, 4}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 
    4}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 4}, {2, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {1, 4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {1, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 4}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 4}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {2, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 
    4}, {1, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 4}, {1, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {3, 4}, {1, 3}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {3, 4}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 4}, {2, 
    1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 4}, {2, 2}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {3, 4}, {2, 3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 
    4}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 4}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {3, 4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {3, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 4}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 4}, {4, 4}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {1, 4}, {1, 5}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 
    4}, {2, 5}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 4}, {4, 5}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {2, 4}, {2, 5}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {2, 4}, {3, 5}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 4}, {4, 
    5}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 4}, {1, 5}}, {{1, 2}, {1, 
    3}} -> {{1, 2}, {1, 4}, {2, 5}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 
    4}, {3, 5}}, {{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {3, 5}}, {{1, 
    2}, {1, 3}} -> {{1, 2}, {2, 4}, {4, 5}}, {{1, 2}, {1, 3}} -> {{2, 
    1}, {1, 4}, {3, 5}}, {{1, 2}, {1, 3}} -> {{2, 1}, {1, 4}, {4, 
    5}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 4}, {1, 5}}, {{1, 2}, {1, 
    3}} -> {{2, 1}, {2, 4}, {2, 5}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 
    4}, {3, 5}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 4}, {1, 5}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {1, 4}, {3, 5}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {1, 4}, {4, 5}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {1, 
    5}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {2, 5}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {2, 4}, {3, 5}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    4}, {4, 5}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 4}, {3, 5}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {3, 4}, {4, 5}}, {{1, 2}, {1, 3}} -> {{2, 
    3}, {2, 4}, {1, 5}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 4}, {2, 
    5}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 4}, {3, 5}}, {{1, 2}, {1, 
    3}} -> {{2, 3}, {3, 4}, {1, 5}}, {{1, 2}, {1, 3}} -> {{2, 3}, {3, 
    4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 4}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {1, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {1, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 4}, {4, 
    5}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 4}, {2, 5}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {2, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{1, 1}, {2, 
    4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 4}, {3, 5}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {3, 4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{1, 
    2}, {1, 4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 4}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 4}, {3, 5}}, {{1, 2}, {2, 
    3}} -> {{1, 2}, {2, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 
    4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 4}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{1, 3}, {1, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{1, 
    3}, {1, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 4}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 4}, {4, 5}}, {{1, 2}, {2, 
    3}} -> {{2, 1}, {1, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{2, 1}, {1, 
    4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 4}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{2, 1}, {2, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{2, 
    1}, {2, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 4}, {1, 
    5}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 4}, {3, 5}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {1, 4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 4}, {2, 5}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {2, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {2, 4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 4}, {3, 
    5}}, {{1, 2}, {2, 3}} -> {{2, 2}, {3, 4}, {4, 5}}, {{1, 2}, {2, 
    3}} -> {{2, 3}, {2, 4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 
    4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 4}, {3, 5}}, {{1, 
    2}, {2, 3}} -> {{2, 3}, {3, 4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{2, 
    3}, {3, 4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{3, 1}, {1, 4}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{3, 1}, {1, 4}, {4, 5}}, {{1, 2}, {2, 
    3}} -> {{3, 1}, {3, 4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 
    4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 4}, {3, 5}}, {{1, 
    2}, {2, 3}} -> {{3, 2}, {2, 4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{3, 
    2}, {2, 4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 4}, {1, 
    5}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 4}, {2, 5}}, {{1, 2}, {2, 
    3}} -> {{3, 2}, {3, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 
    4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 4}, {2, 5}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {1, 4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {2, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 4}, {4, 
    5}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 4}, {1, 5}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {3, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 
    4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 4}, {4, 5}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {1, 4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {1, 4}, {5, 2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {1, 4}, {5, 
    4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {2, 4}, {5, 3}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {2, 4}, {5, 4}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 
    4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{1, 2}, {1, 4}, {5, 2}}, {{1, 
    2}, {1, 3}} -> {{1, 2}, {1, 4}, {5, 3}}, {{1, 2}, {1, 3}} -> {{1, 
    2}, {2, 4}, {5, 2}}, {{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {5, 
    3}}, {{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {5, 4}}, {{1, 2}, {1, 
    3}} -> {{2, 1}, {1, 4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{2, 1}, {1, 
    4}, {5, 3}}, {{1, 2}, {1, 3}} -> {{2, 1}, {1, 4}, {5, 4}}, {{1, 
    2}, {1, 3}} -> {{2, 1}, {2, 4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    1}, {2, 4}, {5, 2}}, {{1, 2}, {1, 3}} -> {{2, 1}, {2, 4}, {5, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {1, 4}, {5, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {1, 4}, {5, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 
    4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {5, 2}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {2, 4}, {5, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {2, 4}, {5, 4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 4}, {5, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {3, 4}, {5, 4}}, {{1, 2}, {1, 
    3}} -> {{2, 3}, {2, 4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 
    4}, {5, 2}}, {{1, 2}, {1, 3}} -> {{2, 3}, {2, 4}, {5, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 3}, {3, 4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    3}, {3, 4}, {5, 3}}, {{1, 2}, {1, 3}} -> {{2, 3}, {3, 4}, {5, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 4}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {1, 4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 
    4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {1, 4}, {5, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {2, 4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {2, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 4}, {5, 
    2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {3, 4}, {5, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 2}, {1, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 
    4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 2}, {1, 4}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 2}, {2, 4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 
    2}, {2, 4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 2}, {2, 4}, {5, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 4}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{1, 3}, {1, 4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 3}, {1, 
    4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 3}, {3, 4}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 3}, {3, 4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    3}, {3, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{2, 1}, {1, 4}, {5, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 1}, {1, 4}, {5, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 1}, {1, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 
    4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{2, 1}, {2, 4}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{2, 1}, {2, 4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {1, 4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {1, 4}, {5, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 4}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {2, 4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 
    4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {2, 4}, {5, 4}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {3, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {3, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 4}, {5, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 3}, {2, 4}, {5, 2}}, {{1, 2}, {2, 
    3}} -> {{2, 3}, {2, 4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{2, 3}, {3, 
    4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{2, 3}, {3, 4}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{2, 3}, {3, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{3, 
    1}, {1, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 1}, {1, 4}, {5, 
    2}}, {{1, 2}, {2, 3}} -> {{3, 1}, {1, 4}, {5, 4}}, {{1, 2}, {2, 
    3}} -> {{3, 1}, {3, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 
    4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 1}, {3, 4}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{3, 2}, {2, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    2}, {2, 4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 2}, {2, 4}, {5, 
    4}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 4}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 2}, {3, 4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 2}, {3, 
    4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {1, 4}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {1, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {2, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {2, 4}, {5, 
    4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 4}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {3, 4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 
    4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {3, 4}, {5, 4}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {4, 1}, {2, 2}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {4, 1}, {2, 3}}, {{1, 2}, {1, 3}} -> {{1, 1}, {4, 1}, {2, 
    4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {4, 1}, {4, 1}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {4, 1}, {4, 2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {4, 
    2}, {2, 3}}, {{1, 2}, {1, 3}} -> {{1, 1}, {4, 2}, {4, 2}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {4, 2}, {4, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {4, 1}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 1}, {4, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 1}, {4, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {4, 2}, {1, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 
    2}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 2}, {1, 4}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {4, 2}, {3, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {4, 2}, {3, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 2}, {3, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 2}, {4, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {4, 2}, {4, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 
    2}, {4, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 3}, {3, 1}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {4, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {4, 1}, {2, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 1}, {2, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 1}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {4, 1}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 
    1}, {3, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 1}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {4, 1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {4, 1}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 1}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 2}, {2, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {4, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 
    2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 3}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {4, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {4, 1}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 1}, {4, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 1}, {4, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {4, 2}, {1, 1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 
    2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 2}, {1, 4}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {4, 2}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {4, 2}, {3, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 2}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 2}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {4, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 
    2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 3}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {4, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {4, 1}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 1}, {4, 
    1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 1}, {4, 2}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {4, 2}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 
    2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 3}, {1, 1}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {4, 3}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {4, 3}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 3}, {2, 
    1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 3}, {2, 2}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {4, 3}, {2, 4}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 
    3}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 3}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {4, 3}, {4, 3}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {4, 1}, {2, 5}}, {{1, 2}, {1, 3}} -> {{1, 1}, {4, 1}, {4, 
    5}}, {{1, 2}, {1, 3}} -> {{1, 1}, {4, 2}, {2, 5}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {4, 2}, {4, 5}}, {{1, 2}, {1, 3}} -> {{1, 2}, {4, 
    2}, {3, 5}}, {{1, 2}, {1, 3}} -> {{2, 1}, {4, 1}, {3, 5}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {4, 1}, {1, 5}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {4, 1}, {4, 5}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 2}, {1, 
    5}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 2}, {3, 5}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {4, 2}, {4, 5}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 
    3}, {3, 5}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 3}, {4, 5}}, {{1, 
    2}, {1, 3}} -> {{2, 3}, {4, 3}, {1, 5}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {4, 1}, {2, 5}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 1}, {3, 
    5}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 1}, {4, 5}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {4, 2}, {2, 5}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 
    2}, {4, 5}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 3}, {3, 5}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {4, 3}, {4, 5}}, {{1, 2}, {2, 3}} -> {{1, 
    2}, {4, 2}, {3, 5}}, {{1, 2}, {2, 3}} -> {{1, 3}, {4, 3}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{2, 1}, {4, 1}, {3, 5}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {4, 1}, {1, 5}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 
    1}, {4, 5}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 2}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {4, 2}, {3, 5}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {4, 2}, {4, 5}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 3}, {3, 
    5}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 3}, {4, 5}}, {{1, 2}, {2, 
    3}} -> {{2, 3}, {4, 3}, {1, 5}}, {{1, 2}, {2, 3}} -> {{3, 1}, {4, 
    1}, {2, 5}}, {{1, 2}, {2, 3}} -> {{3, 2}, {4, 2}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {4, 1}, {1, 5}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {4, 1}, {4, 5}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 2}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 2}, {4, 5}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {4, 3}, {1, 5}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 
    3}, {2, 5}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 3}, {4, 5}}, {{1, 
    2}, {1, 3}} -> {{1, 1}, {4, 1}, {5, 1}}, {{1, 2}, {1, 3}} -> {{1, 
    1}, {4, 1}, {5, 2}}, {{1, 2}, {1, 3}} -> {{1, 1}, {4, 1}, {5, 
    4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {4, 2}, {5, 2}}, {{1, 2}, {1, 
    3}} -> {{1, 1}, {4, 2}, {5, 3}}, {{1, 2}, {1, 3}} -> {{1, 2}, {4, 
    2}, {5, 2}}, {{1, 2}, {1, 3}} -> {{1, 2}, {4, 2}, {5, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 1}, {4, 1}, {5, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    1}, {4, 1}, {5, 3}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 1}, {5, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 1}, {5, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {4, 2}, {5, 1}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 
    2}, {5, 2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 2}, {5, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 2}, {4, 2}, {5, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    2}, {4, 3}, {5, 3}}, {{1, 2}, {1, 3}} -> {{2, 3}, {4, 3}, {5, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 3}, {4, 3}, {5, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 1}, {4, 1}, {5, 1}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 
    1}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 1}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 1}, {4, 1}, {5, 4}}, {{1, 2}, {2, 3}} -> {{1, 
    1}, {4, 2}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 2}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 3}, {5, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 2}, {4, 2}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 2}, {4, 
    2}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 3}, {4, 3}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 3}, {4, 3}, {5, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    1}, {4, 1}, {5, 1}}, {{1, 2}, {2, 3}} -> {{2, 1}, {4, 1}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 1}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 2}, {4, 1}, {5, 3}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 
    2}, {5, 1}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 2}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {4, 2}, {5, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {4, 2}, {5, 4}}, {{1, 2}, {2, 3}} -> {{2, 2}, {4, 3}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 3}, {4, 3}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 3}, {4, 3}, {5, 3}}, {{1, 2}, {2, 3}} -> {{3, 1}, {4, 
    1}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 1}, {4, 1}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 2}, {4, 2}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    2}, {4, 2}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 1}, {5, 
    1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 1}, {5, 2}}, {{1, 2}, {2, 
    3}} -> {{3, 3}, {4, 2}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 
    3}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 3}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 3}, {4, 3}, {5, 3}}, {{1, 2}, {2, 3}} -> {{3, 
    3}, {4, 3}, {5, 4}}, {{1, 2}, {1, 3}} -> {{1, 1}, {4, 5}, {5, 
    2}}, {{1, 2}, {1, 3}} -> {{2, 2}, {4, 5}, {5, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 2}, {4, 5}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 
    5}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 1}, {4, 5}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{2, 2}, {4, 5}, {5, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    2}, {4, 5}, {5, 3}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 5}, {5, 
    1}}, {{1, 2}, {2, 3}} -> {{3, 3}, {4, 5}, {5, 2}}, {{1, 2}, {1, 
    3}} -> {{1, 4}, {1, 2}, {3, 4}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 
    2}, {4, 2}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 2}, {4, 3}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {1, 4}, {1, 2}}, {{1, 2}, {1, 3}} -> {{1, 
    4}, {1, 4}, {1, 4}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 4}, {2, 
    1}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 4}, {2, 3}}, {{1, 2}, {1, 
    3}} -> {{1, 4}, {1, 4}, {2, 4}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 
    4}, {4, 1}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 4}, {4, 2}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {2, 4}, {3, 4}}, {{1, 2}, {1, 3}} -> {{1, 
    4}, {4, 1}, {1, 2}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 1}, {2, 
    1}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 1}, {2, 3}}, {{1, 2}, {1, 
    3}} -> {{1, 4}, {4, 2}, {2, 1}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 
    2}, {2, 3}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 2}, {3, 2}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {4, 2}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {2, 1}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 1}, {4, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 1}, {4, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {2, 3}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 
    3}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 3}, {4, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {2, 4}, {1, 2}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {2, 4}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {1, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {2, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {2, 4}, {2, 3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 
    4}, {2, 4}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {3, 1}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {2, 4}, {3, 2}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {2, 4}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {4, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {4, 2}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {2, 4}, {4, 3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 
    1}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 1}, {3, 1}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {4, 1}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {4, 2}, {1, 2}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 2}, {1, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 2}, {2, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {4, 2}, {2, 3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 
    2}, {3, 1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 2}, {3, 2}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {4, 3}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {4, 3}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 2}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 2}, {4, 2}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {1, 2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 
    3}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 3}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {1, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {1, 4}, {1, 2}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 4}, {1, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 4}, {1, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {1, 4}, {2, 1}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 
    4}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 4}, {2, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {1, 4}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {1, 4}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 4}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 4}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {1, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 
    4}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {2, 4}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {4, 1}, {1, 2}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {4, 1}, {1, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 1}, {2, 
    1}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 1}, {2, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {4, 1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 
    1}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 2}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {4, 2}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {4, 2}, {3, 2}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 2}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 3}, {2, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {4, 3}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 
    3}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 3}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {2, 1}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {2, 1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 1}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 3}, {1, 4}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {2, 3}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 
    3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 4}, {1, 2}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {2, 4}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {2, 4}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 4}, {2, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 4}, {2, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {2, 4}, {2, 4}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 
    4}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 4}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {2, 4}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {2, 4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 4}, {4, 
    2}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 4}, {4, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {4, 1}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 
    1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 1}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {4, 2}, {1, 2}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {4, 2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 2}, {2, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 2}, {2, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {4, 2}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 
    2}, {3, 2}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 3}, {1, 3}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {4, 3}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {4, 3}, {3, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 1}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 1}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {3, 1}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 
    2}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 2}, {4, 1}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {3, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {3, 4}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 4}, {1, 
    3}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 4}, {1, 4}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {3, 4}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 
    4}, {2, 3}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 4}, {2, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {3, 4}, {3, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {3, 4}, {3, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 4}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 4}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {3, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 
    4}, {4, 3}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 1}, {1, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {4, 1}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {4, 2}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 2}, {2, 
    1}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 3}, {1, 2}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {4, 3}, {1, 3}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 
    3}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 3}, {2, 3}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {4, 3}, {3, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {4, 3}, {3, 2}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 2}, {4, 
    5}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 4}, {1, 5}}, {{1, 2}, {1, 
    3}} -> {{1, 4}, {1, 4}, {2, 5}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 
    4}, {4, 5}}, {{1, 2}, {1, 3}} -> {{1, 4}, {2, 4}, {3, 5}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {4, 1}, {1, 5}}, {{1, 2}, {1, 3}} -> {{1, 
    4}, {4, 1}, {2, 5}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 2}, {2, 
    5}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 2}, {3, 5}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {2, 1}, {4, 5}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 
    3}, {4, 5}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {1, 5}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {2, 4}, {2, 5}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {2, 4}, {3, 5}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {4, 
    5}}, {{1, 2}, {1, 3}} -> {{2, 4}, {3, 4}, {1, 5}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {4, 1}, {1, 5}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 
    1}, {3, 5}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 2}, {1, 5}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {4, 2}, {2, 5}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {4, 2}, {3, 5}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 3}, {1, 
    5}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 3}, {3, 5}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {1, 2}, {4, 5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 
    3}, {4, 5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 4}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {1, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {1, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 4}, {4, 
    5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {2, 4}, {3, 5}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {3, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 
    1}, {1, 5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 1}, {2, 5}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {4, 1}, {3, 5}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {4, 2}, {2, 5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 2}, {3, 
    5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 3}, {2, 5}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {4, 3}, {3, 5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 
    1}, {4, 5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 3}, {4, 5}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {2, 4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {2, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 4}, {3, 
    5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 4}, {4, 5}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {3, 4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 
    1}, {1, 5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 1}, {3, 5}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {4, 2}, {1, 5}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {4, 2}, {2, 5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 2}, {3, 
    5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 3}, {1, 5}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {4, 3}, {3, 5}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 
    1}, {4, 5}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 2}, {4, 5}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {3, 4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {3, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 4}, {3, 
    5}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 4}, {4, 5}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {4, 1}, {1, 5}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 
    1}, {2, 5}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 2}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {4, 2}, {2, 5}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {4, 3}, {1, 5}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 3}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 3}, {3, 5}}, {{1, 2}, {1, 
    3}} -> {{1, 4}, {1, 2}, {5, 4}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 
    4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 4}, {5, 2}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {1, 4}, {5, 4}}, {{1, 2}, {1, 3}} -> {{1, 
    4}, {2, 4}, {5, 3}}, {{1, 2}, {1, 3}} -> {{1, 4}, {2, 4}, {5, 
    4}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 1}, {5, 1}}, {{1, 2}, {1, 
    3}} -> {{1, 4}, {4, 1}, {5, 2}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 
    2}, {5, 2}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 2}, {5, 3}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {4, 2}, {5, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {2, 1}, {5, 4}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 3}, {5, 
    4}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {5, 1}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {2, 4}, {5, 2}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 
    4}, {5, 3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {5, 4}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {3, 4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {3, 4}, {5, 4}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 1}, {5, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 1}, {5, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {4, 1}, {5, 4}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 
    2}, {5, 1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 2}, {5, 2}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {4, 2}, {5, 3}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {4, 3}, {5, 1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 3}, {5, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 3}, {5, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {1, 2}, {5, 4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 
    3}, {5, 4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 4}, {5, 1}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {1, 4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {1, 4}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 4}, {5, 
    4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {2, 4}, {5, 3}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {2, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {3, 
    4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 4}, {3, 4}, {5, 4}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {4, 1}, {5, 1}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {4, 1}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 1}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 2}, {5, 2}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {4, 2}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 
    2}, {5, 4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 3}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {4, 3}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {4, 3}, {5, 4}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 1}, {5, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 3}, {5, 4}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {2, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 
    4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 4}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {2, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {3, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {3, 4}, {5, 
    4}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 1}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {4, 1}, {5, 3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 
    1}, {5, 4}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 2}, {5, 1}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {4, 2}, {5, 2}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {4, 2}, {5, 3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 3}, {5, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 3}, {5, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {4, 3}, {5, 4}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 
    1}, {5, 4}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 2}, {5, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {3, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {3, 4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 4}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 4}, {5, 4}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {4, 1}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 
    1}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 1}, {5, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {4, 2}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {4, 2}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 2}, {5, 
    4}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 3}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {4, 3}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 
    3}, {5, 3}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 5}, {2, 1}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {1, 5}, {2, 3}}, {{1, 2}, {1, 3}} -> {{1, 
    4}, {1, 5}, {2, 4}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 5}, {4, 
    2}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 5}, {4, 5}}, {{1, 2}, {1, 
    3}} -> {{1, 4}, {4, 5}, {2, 3}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 
    5}, {2, 4}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 5}, {2, 5}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {4, 5}, {5, 1}}, {{1, 2}, {1, 3}} -> {{1, 
    4}, {4, 5}, {5, 2}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 5}, {1, 
    2}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 5}, {1, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {2, 5}, {1, 4}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 
    5}, {3, 1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 5}, {3, 2}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {2, 5}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {2, 5}, {4, 1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 5}, {4, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 5}, {4, 5}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {4, 5}, {1, 3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 
    5}, {1, 5}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 5}, {3, 1}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {4, 5}, {3, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {4, 5}, {3, 5}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 5}, {5, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 5}, {5, 2}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {4, 5}, {5, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 
    5}, {2, 1}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 5}, {2, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {1, 5}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {1, 5}, {3, 1}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 5}, {3, 
    2}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 5}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {1, 5}, {4, 2}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 
    5}, {4, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 5}, {4, 5}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {4, 5}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {4, 5}, {2, 4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 5}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 5}, {3, 2}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {4, 5}, {3, 4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 
    5}, {3, 5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 5}, {5, 1}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {4, 5}, {5, 2}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {4, 5}, {5, 3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 5}, {1, 
    2}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 5}, {1, 3}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {2, 5}, {1, 4}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 
    5}, {3, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 5}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {2, 5}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {2, 5}, {4, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 5}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 5}, {4, 5}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {4, 5}, {1, 3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 
    5}, {1, 5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 5}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {4, 5}, {3, 4}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {4, 5}, {3, 5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 5}, {5, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 5}, {5, 2}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {4, 5}, {5, 3}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 
    5}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 5}, {1, 3}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {3, 5}, {1, 4}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {3, 5}, {2, 1}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 5}, {2, 
    3}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 5}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {3, 5}, {4, 1}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 
    5}, {4, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 5}, {4, 5}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {4, 5}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {4, 5}, {1, 5}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 5}, {2, 
    1}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 5}, {2, 5}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {4, 5}, {5, 1}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 
    5}, {5, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 5}, {5, 3}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {1, 5}, {1, 6}}, {{1, 2}, {1, 3}} -> {{1, 
    4}, {1, 5}, {2, 6}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 5}, {4, 
    6}}, {{1, 2}, {1, 3}} -> {{1, 4}, {2, 5}, {3, 6}}, {{1, 2}, {1, 
    3}} -> {{1, 4}, {4, 5}, {2, 6}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 
    5}, {5, 6}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 5}, {1, 6}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {2, 5}, {2, 6}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {2, 5}, {3, 6}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 5}, {4, 
    6}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 5}, {1, 6}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {4, 5}, {3, 6}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 
    5}, {5, 6}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 5}, {1, 6}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {1, 5}, {2, 6}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {1, 5}, {3, 6}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 5}, {4, 
    6}}, {{1, 2}, {2, 3}} -> {{1, 4}, {2, 5}, {3, 6}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {4, 5}, {2, 6}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 
    5}, {3, 6}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 5}, {5, 6}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {2, 5}, {1, 6}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {2, 5}, {2, 6}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 5}, {3, 
    6}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 5}, {4, 6}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {4, 5}, {1, 6}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 
    5}, {3, 6}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 5}, {5, 6}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {3, 5}, {1, 6}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {3, 5}, {2, 6}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 5}, {3, 
    6}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 5}, {4, 6}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {4, 5}, {1, 6}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 
    5}, {2, 6}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 5}, {5, 6}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {1, 5}, {6, 1}}, {{1, 2}, {1, 3}} -> {{1, 
    4}, {1, 5}, {6, 2}}, {{1, 2}, {1, 3}} -> {{1, 4}, {1, 5}, {6, 
    4}}, {{1, 2}, {1, 3}} -> {{1, 4}, {2, 5}, {6, 3}}, {{1, 2}, {1, 
    3}} -> {{1, 4}, {4, 5}, {6, 2}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 
    5}, {6, 4}}, {{1, 2}, {1, 3}} -> {{1, 4}, {4, 5}, {6, 5}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {2, 5}, {6, 1}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {2, 5}, {6, 2}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 5}, {6, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {2, 5}, {6, 4}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {3, 5}, {6, 1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 
    5}, {6, 1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {4, 5}, {6, 3}}, {{1, 
    2}, {1, 3}} -> {{2, 4}, {4, 5}, {6, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {4, 5}, {6, 5}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 5}, {6, 
    1}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 5}, {6, 2}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {1, 5}, {6, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {1, 
    5}, {6, 4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {2, 5}, {6, 3}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {3, 5}, {6, 2}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {4, 5}, {6, 2}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 5}, {6, 
    3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {4, 5}, {6, 4}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {4, 5}, {6, 5}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 
    5}, {6, 1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {2, 5}, {6, 2}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {2, 5}, {6, 3}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {2, 5}, {6, 4}}, {{1, 2}, {2, 3}} -> {{2, 4}, {3, 5}, {6, 
    1}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 5}, {6, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {4, 5}, {6, 3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 
    5}, {6, 4}}, {{1, 2}, {2, 3}} -> {{2, 4}, {4, 5}, {6, 5}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {3, 5}, {6, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {3, 5}, {6, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 5}, {6, 
    3}}, {{1, 2}, {2, 3}} -> {{3, 4}, {3, 5}, {6, 4}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {4, 5}, {6, 1}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 
    5}, {6, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {4, 5}, {6, 4}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {4, 5}, {6, 5}}, {{1, 2}, {1, 3}} -> {{1, 
    4}, {5, 4}, {2, 3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {5, 4}, {1, 
    3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {5, 4}, {3, 1}}, {{1, 2}, {2, 
    3}} -> {{1, 4}, {5, 4}, {2, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {5, 
    4}, {3, 2}}, {{1, 2}, {2, 3}} -> {{2, 4}, {5, 4}, {1, 3}}, {{1, 
    2}, {2, 3}} -> {{2, 4}, {5, 4}, {3, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {5, 4}, {1, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {5, 4}, {2, 
    1}}, {{1, 2}, {1, 3}} -> {{1, 4}, {5, 4}, {2, 6}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {5, 4}, {1, 6}}, {{1, 2}, {1, 3}} -> {{2, 4}, {5, 
    4}, {3, 6}}, {{1, 2}, {2, 3}} -> {{1, 4}, {5, 4}, {2, 6}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {5, 4}, {3, 6}}, {{1, 2}, {2, 3}} -> {{2, 
    4}, {5, 4}, {1, 6}}, {{1, 2}, {2, 3}} -> {{2, 4}, {5, 4}, {3, 
    6}}, {{1, 2}, {2, 3}} -> {{3, 4}, {5, 4}, {1, 6}}, {{1, 2}, {2, 
    3}} -> {{3, 4}, {5, 4}, {2, 6}}, {{1, 2}, {1, 3}} -> {{1, 4}, {5, 
    2}, {6, 3}}, {{1, 2}, {1, 3}} -> {{1, 4}, {5, 4}, {6, 2}}, {{1, 
    2}, {1, 3}} -> {{1, 4}, {5, 4}, {6, 4}}, {{1, 2}, {1, 3}} -> {{2, 
    4}, {5, 1}, {6, 3}}, {{1, 2}, {1, 3}} -> {{2, 4}, {5, 4}, {6, 
    1}}, {{1, 2}, {1, 3}} -> {{2, 4}, {5, 4}, {6, 3}}, {{1, 2}, {1, 
    3}} -> {{2, 4}, {5, 4}, {6, 4}}, {{1, 2}, {2, 3}} -> {{1, 4}, {5, 
    2}, {6, 3}}, {{1, 2}, {2, 3}} -> {{1, 4}, {5, 4}, {6, 2}}, {{1, 
    2}, {2, 3}} -> {{1, 4}, {5, 4}, {6, 3}}, {{1, 2}, {2, 3}} -> {{1, 
    4}, {5, 4}, {6, 4}}, {{1, 2}, {2, 3}} -> {{2, 4}, {5, 1}, {6, 
    3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {5, 4}, {6, 1}}, {{1, 2}, {2, 
    3}} -> {{2, 4}, {5, 4}, {6, 3}}, {{1, 2}, {2, 3}} -> {{2, 4}, {5, 
    4}, {6, 4}}, {{1, 2}, {2, 3}} -> {{3, 4}, {5, 1}, {6, 2}}, {{1, 
    2}, {2, 3}} -> {{3, 4}, {5, 4}, {6, 1}}, {{1, 2}, {2, 3}} -> {{3, 
    4}, {5, 4}, {6, 2}}, {{1, 2}, {2, 3}} -> {{3, 4}, {5, 4}, {6, 
    4}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 2}, {2, 3}}, {{1, 2}, {1, 
    3}} -> {{4, 1}, {1, 2}, {3, 2}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 
    4}, {2, 4}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 4}, {4, 2}}, {{1, 
    2}, {1, 3}} -> {{4, 1}, {4, 1}, {1, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    1}, {4, 1}, {1, 4}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 1}, {2, 
    1}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 1}, {2, 3}}, {{1, 2}, {1, 
    3}} -> {{4, 1}, {4, 1}, {2, 4}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 
    1}, {4, 1}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 1}, {4, 2}}, {{1, 
    2}, {1, 3}} -> {{4, 1}, {4, 2}, {1, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    1}, {4, 2}, {1, 3}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 2}, {3, 
    1}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 2}, {3, 4}}, {{1, 2}, {1, 
    3}} -> {{4, 1}, {4, 2}, {4, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 
    1}, {1, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 1}, {3, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {2, 3}, {1, 3}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {2, 3}, {3, 1}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 4}, {1, 
    4}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 4}, {3, 4}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {2, 4}, {4, 1}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 
    4}, {4, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 1}, {2, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {4, 1}, {2, 3}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {4, 1}, {3, 2}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 2}, {1, 
    2}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 2}, {1, 3}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {4, 2}, {1, 4}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 
    2}, {2, 1}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 2}, {2, 3}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {4, 2}, {2, 4}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {4, 2}, {3, 1}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 2}, {3, 
    2}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 2}, {3, 4}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {4, 2}, {4, 1}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 
    2}, {4, 2}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 2}, {4, 3}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {4, 3}, {1, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {4, 3}, {1, 4}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 3}, {2, 
    1}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 3}, {2, 3}}, {{1, 2}, {1, 
    3}} -> {{4, 4}, {1, 4}, {1, 2}}, {{1, 2}, {1, 3}} -> {{4, 4}, {1, 
    4}, {1, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {1, 4}, {2, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {1, 4}, {2, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {1, 4}, {2, 3}}, {{1, 2}, {1, 3}} -> {{4, 4}, {1, 4}, {2, 
    4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {2, 4}, {1, 1}}, {{1, 2}, {1, 
    3}} -> {{4, 4}, {2, 4}, {1, 2}}, {{1, 2}, {1, 3}} -> {{4, 4}, {2, 
    4}, {1, 3}}, {{1, 2}, {1, 3}} -> {{4, 4}, {2, 4}, {2, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {2, 4}, {2, 3}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {2, 4}, {2, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {2, 4}, {3, 
    1}}, {{1, 2}, {1, 3}} -> {{4, 4}, {2, 4}, {3, 2}}, {{1, 2}, {1, 
    3}} -> {{4, 4}, {2, 4}, {3, 3}}, {{1, 2}, {1, 3}} -> {{4, 4}, {2, 
    4}, {3, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 1}, {1, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {4, 1}, {1, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {4, 1}, {1, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 1}, {2, 
    1}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 1}, {2, 2}}, {{1, 2}, {1, 
    3}} -> {{4, 4}, {4, 1}, {2, 3}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 
    1}, {2, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 1}, {4, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {4, 1}, {4, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {4, 2}, {1, 1}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 2}, {1, 
    2}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 2}, {1, 3}}, {{1, 2}, {1, 
    3}} -> {{4, 4}, {4, 2}, {1, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 
    2}, {2, 1}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 2}, {2, 2}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {4, 2}, {2, 3}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {4, 2}, {2, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 2}, {3, 
    1}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 2}, {3, 2}}, {{1, 2}, {1, 
    3}} -> {{4, 4}, {4, 2}, {3, 3}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 
    2}, {3, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 2}, {4, 2}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {4, 2}, {4, 3}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {4, 4}, {1, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 4}, {2, 
    4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 4}, {4, 1}}, {{1, 2}, {1, 
    3}} -> {{4, 4}, {4, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 
    2}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 2}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {1, 3}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {1, 3}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 4}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 4}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {1, 4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 
    4}, {4, 3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 1}, {1, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {4, 1}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {4, 1}, {1, 4}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 1}, {2, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 1}, {2, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {4, 1}, {2, 4}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 
    1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 1}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {4, 1}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {4, 1}, {4, 1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 1}, {4, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 1}, {4, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {4, 2}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 
    2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 2}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {4, 2}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {4, 2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {4, 3}, {2, 1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 
    3}, {2, 4}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 1}, {1, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {2, 1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {2, 3}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 3}, {3, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 4}, {1, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {2, 4}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 
    4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 4}, {4, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {4, 1}, {2, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {4, 1}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 1}, {3, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 2}, {1, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {4, 2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 
    2}, {1, 4}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 2}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {4, 2}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {4, 2}, {2, 4}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 2}, {3, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 2}, {3, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {4, 2}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 
    2}, {4, 1}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 2}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {4, 2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {4, 3}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 3}, {1, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 3}, {2, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {4, 3}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 
    1}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 1}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {3, 2}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {3, 2}, {2, 1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 4}, {1, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 4}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {3, 4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 
    4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 1}, {2, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {4, 1}, {3, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {4, 1}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 2}, {1, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 2}, {3, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {4, 2}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 
    3}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 3}, {1, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {4, 3}, {1, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {4, 3}, {2, 1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 3}, {2, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 3}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {4, 3}, {3, 1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 
    3}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 3}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {4, 3}, {4, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {4, 3}, {4, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 3}, {4, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {1, 4}, {1, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {1, 4}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {1, 
    4}, {1, 4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {1, 4}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {1, 4}, {2, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {1, 4}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {1, 4}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {1, 4}, {3, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {1, 4}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {1, 
    4}, {3, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {1, 4}, {3, 4}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {2, 4}, {1, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {2, 4}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {2, 4}, {1, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {2, 4}, {2, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {2, 4}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {2, 
    4}, {2, 4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {2, 4}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {2, 4}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {2, 4}, {3, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {2, 4}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {3, 4}, {1, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {3, 4}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {3, 
    4}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {3, 4}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {3, 4}, {2, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {3, 4}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {3, 4}, {3, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 4}, {3, 4}, {3, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {3, 4}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    1}, {1, 1}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 1}, {1, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 1}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 1}, {1, 4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 1}, {2, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 1}, {2, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {4, 1}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    1}, {2, 4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 1}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 1}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 1}, {3, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 1}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 1}, {4, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {4, 1}, {4, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    1}, {4, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 2}, {1, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 2}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 2}, {1, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 2}, {2, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {4, 2}, {2, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    2}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 2}, {2, 4}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 2}, {3, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 2}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 2}, {3, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 2}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {4, 2}, {4, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    2}, {4, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 3}, {1, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 3}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 3}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 3}, {1, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 3}, {2, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {4, 3}, {2, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    3}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 3}, {2, 4}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 3}, {3, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 3}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 3}, {3, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 3}, {3, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {4, 3}, {4, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    4}, {1, 4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 4}, {2, 4}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 4}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 4}, {4, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 4}, {4, 3}}, {{1, 2}, {1, 
    3}} -> {{4, 1}, {1, 2}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 
    2}, {3, 5}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 4}, {4, 5}}, {{1, 
    2}, {1, 3}} -> {{4, 1}, {4, 1}, {1, 5}}, {{1, 2}, {1, 3}} -> {{4, 
    1}, {4, 1}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 1}, {4, 
    5}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 2}, {1, 5}}, {{1, 2}, {1, 
    3}} -> {{4, 1}, {4, 2}, {3, 5}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 
    2}, {4, 5}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 1}, {1, 5}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {2, 1}, {3, 5}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {2, 3}, {1, 5}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 3}, {3, 
    5}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 4}, {4, 5}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {4, 1}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 
    2}, {1, 5}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 2}, {2, 5}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {4, 2}, {3, 5}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {4, 2}, {4, 5}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 3}, {1, 
    5}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 3}, {2, 5}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {4, 3}, {4, 5}}, {{1, 2}, {1, 3}} -> {{4, 4}, {1, 
    4}, {1, 5}}, {{1, 2}, {1, 3}} -> {{4, 4}, {1, 4}, {2, 5}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {2, 4}, {1, 5}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {2, 4}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 4}, {2, 4}, {3, 
    5}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 1}, {1, 5}}, {{1, 2}, {1, 
    3}} -> {{4, 4}, {4, 1}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 
    1}, {4, 5}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 2}, {1, 5}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {4, 2}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {4, 2}, {3, 5}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 2}, {4, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 2}, {2, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {1, 2}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 
    3}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 3}, {3, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {1, 4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {4, 1}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 1}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 1}, {3, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {4, 1}, {4, 5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 
    2}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 2}, {3, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {4, 2}, {4, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {4, 3}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {4, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {2, 1}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 
    1}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 3}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {2, 3}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {2, 4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 1}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 2}, {1, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {4, 2}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 
    2}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 2}, {4, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {4, 3}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {4, 3}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 3}, {4, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 1}, {1, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {3, 1}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 
    2}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 2}, {2, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {3, 4}, {4, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {4, 1}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 2}, {3, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 3}, {1, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {4, 3}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 
    3}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 3}, {4, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {1, 4}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {1, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {1, 4}, {3, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {2, 4}, {1, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {2, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {2, 
    4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {3, 4}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {3, 4}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {3, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 1}, {1, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 1}, {2, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {4, 1}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    1}, {4, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 2}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 2}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 2}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 2}, {4, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 3}, {1, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {4, 3}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    3}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 3}, {4, 5}}, {{1, 
    2}, {1, 3}} -> {{4, 1}, {1, 2}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 
    1}, {1, 2}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 2}, {5, 
    3}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 4}, {5, 4}}, {{1, 2}, {1, 
    3}} -> {{4, 1}, {4, 1}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 
    1}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 1}, {5, 4}}, {{1, 
    2}, {1, 3}} -> {{4, 1}, {4, 2}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 
    1}, {4, 2}, {5, 3}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 2}, {5, 
    4}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 1}, {5, 1}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {2, 1}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 
    1}, {5, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 3}, {5, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {2, 3}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {2, 3}, {5, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 4}, {5, 
    4}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 1}, {5, 2}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {4, 2}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 
    2}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 2}, {5, 3}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {4, 2}, {5, 4}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {4, 3}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 3}, {5, 
    2}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 3}, {5, 4}}, {{1, 2}, {1, 
    3}} -> {{4, 4}, {1, 4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 4}, {1, 
    4}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 4}, {1, 4}, {5, 4}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {2, 4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {2, 4}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 4}, {2, 4}, {5, 
    3}}, {{1, 2}, {1, 3}} -> {{4, 4}, {2, 4}, {5, 4}}, {{1, 2}, {1, 
    3}} -> {{4, 4}, {4, 1}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 
    1}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 1}, {5, 4}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {4, 2}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {4, 2}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 2}, {5, 
    3}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 2}, {5, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {1, 2}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 
    2}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 2}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {1, 3}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {1, 3}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 3}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 4}, {5, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {4, 1}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 
    1}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 1}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {4, 1}, {5, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {4, 2}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 2}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 2}, {5, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {4, 3}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 
    3}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {5, 4}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {2, 1}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {2, 1}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 1}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 3}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {2, 3}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 
    3}, {5, 3}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 4}, {5, 4}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {4, 1}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {4, 2}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 2}, {5, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 2}, {5, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {4, 2}, {5, 4}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 
    3}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 3}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {4, 3}, {5, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {3, 1}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 1}, {5, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 1}, {5, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {3, 2}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 
    2}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 2}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {3, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {4, 1}, {5, 3}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 2}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 3}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {4, 3}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 
    3}, {5, 3}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 3}, {5, 4}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {1, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {1, 4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {1, 4}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {1, 4}, {5, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {2, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 4}, {2, 
    4}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {2, 4}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {2, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {3, 4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 4}, {3, 4}, {5, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 4}, {3, 4}, {5, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {3, 4}, {5, 4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    1}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 1}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 1}, {5, 3}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 1}, {5, 4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 2}, {5, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 2}, {5, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {4, 2}, {5, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    2}, {5, 4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 3}, {5, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 3}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 3}, {5, 3}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 3}, {5, 
    4}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 5}, {2, 3}}, {{1, 2}, {1, 
    3}} -> {{4, 1}, {1, 5}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 
    5}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 5}, {1, 2}}, {{1, 
    2}, {1, 3}} -> {{4, 1}, {4, 5}, {1, 5}}, {{1, 2}, {1, 3}} -> {{4, 
    1}, {4, 5}, {2, 1}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 5}, {2, 
    3}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 5}, {2, 4}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {2, 5}, {1, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 
    5}, {1, 5}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 5}, {3, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {2, 5}, {3, 5}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {2, 5}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 5}, {5, 
    3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 5}, {1, 2}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {4, 5}, {1, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 
    5}, {1, 4}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 5}, {2, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {4, 5}, {2, 3}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {4, 5}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 5}, {3, 
    1}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 5}, {3, 2}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {4, 5}, {3, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 
    5}, {1, 4}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 5}, {1, 5}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {4, 5}, {2, 4}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {4, 5}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 5}, {5, 
    1}}, {{1, 2}, {1, 3}} -> {{4, 4}, {4, 5}, {5, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {1, 5}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 
    5}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 5}, {3, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {1, 5}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {1, 5}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 5}, {5, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 5}, {1, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {4, 5}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 
    5}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 5}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {4, 5}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {4, 5}, {2, 4}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 5}, {3, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 5}, {3, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {4, 5}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 
    5}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 5}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {2, 5}, {3, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {2, 5}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 5}, {5, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 5}, {5, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {4, 5}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 
    5}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 5}, {1, 4}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {4, 5}, {2, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {4, 5}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 5}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 5}, {3, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {4, 5}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 
    5}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 5}, {1, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {3, 5}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {3, 5}, {2, 1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 5}, {2, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 5}, {5, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {3, 5}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 
    5}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 5}, {1, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {4, 5}, {1, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {4, 5}, {2, 1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 5}, {2, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 5}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {4, 5}, {3, 1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 
    5}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 5}, {3, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 5}, {1, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 5}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 5}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 5}, {2, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {4, 5}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 
    5}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {4, 5}, {5, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {4, 5}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    4}, {4, 5}, {5, 3}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 5}, {2, 
    6}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 5}, {5, 6}}, {{1, 2}, {1, 
    3}} -> {{4, 1}, {4, 5}, {1, 6}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 
    5}, {2, 6}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 5}, {4, 6}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {2, 5}, {1, 6}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {2, 5}, {3, 6}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 5}, {5, 
    6}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 5}, {1, 6}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {4, 5}, {2, 6}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 
    5}, {3, 6}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 5}, {4, 6}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {1, 5}, {2, 6}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {1, 5}, {3, 6}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 5}, {5, 
    6}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 5}, {1, 6}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {4, 5}, {2, 6}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 
    5}, {3, 6}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 5}, {4, 6}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {2, 5}, {1, 6}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {2, 5}, {3, 6}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 5}, {5, 
    6}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 5}, {1, 6}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {4, 5}, {2, 6}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 
    5}, {3, 6}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 5}, {4, 6}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {3, 5}, {1, 6}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {3, 5}, {2, 6}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 5}, {5, 
    6}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 5}, {1, 6}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {4, 5}, {2, 6}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 
    5}, {3, 6}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 5}, {4, 6}}, {{1, 
    2}, {1, 3}} -> {{4, 1}, {1, 5}, {6, 1}}, {{1, 2}, {1, 3}} -> {{4, 
    1}, {1, 5}, {6, 2}}, {{1, 2}, {1, 3}} -> {{4, 1}, {1, 5}, {6, 
    5}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 5}, {6, 1}}, {{1, 2}, {1, 
    3}} -> {{4, 1}, {4, 5}, {6, 2}}, {{1, 2}, {1, 3}} -> {{4, 1}, {4, 
    5}, {6, 4}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 5}, {6, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {2, 5}, {6, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {2, 5}, {6, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {2, 5}, {6, 
    5}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 5}, {6, 1}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {4, 5}, {6, 2}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 
    5}, {6, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {4, 5}, {6, 4}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {1, 5}, {6, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    1}, {1, 5}, {6, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 5}, {6, 
    3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {1, 5}, {6, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {4, 5}, {6, 1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 
    5}, {6, 2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {4, 5}, {6, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 1}, {4, 5}, {6, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {2, 5}, {6, 1}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 5}, {6, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 2}, {2, 5}, {6, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 2}, {2, 5}, {6, 5}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 
    5}, {6, 1}}, {{1, 2}, {2, 3}} -> {{4, 2}, {4, 5}, {6, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {4, 5}, {6, 3}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {4, 5}, {6, 4}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 5}, {6, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 5}, {6, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {3, 5}, {6, 3}}, {{1, 2}, {2, 3}} -> {{4, 3}, {3, 
    5}, {6, 5}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 5}, {6, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {4, 5}, {6, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {4, 5}, {6, 3}}, {{1, 2}, {2, 3}} -> {{4, 3}, {4, 5}, {6, 
    4}}, {{1, 2}, {1, 3}} -> {{4, 1}, {5, 1}, {2, 3}}, {{1, 2}, {1, 
    3}} -> {{4, 2}, {5, 2}, {1, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {5, 
    2}, {3, 1}}, {{1, 2}, {1, 3}} -> {{4, 4}, {5, 4}, {1, 5}}, {{1, 
    2}, {1, 3}} -> {{4, 4}, {5, 4}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 
    4}, {5, 4}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 4}, {5, 4}, {5, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 1}, {5, 1}, {2, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {5, 1}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 2}, {5, 
    2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 2}, {5, 2}, {3, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 3}, {5, 3}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {5, 3}, {2, 1}}, {{1, 2}, {2, 3}} -> {{4, 4}, {5, 4}, {1, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {5, 4}, {2, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 4}, {5, 4}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 4}, {5, 
    4}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 4}, {5, 4}, {5, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 4}, {5, 4}, {5, 3}}, {{1, 2}, {1, 3}} -> {{4, 
    1}, {5, 1}, {2, 6}}, {{1, 2}, {1, 3}} -> {{4, 2}, {5, 2}, {1, 
    6}}, {{1, 2}, {1, 3}} -> {{4, 2}, {5, 2}, {3, 6}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {5, 1}, {2, 6}}, {{1, 2}, {2, 3}} -> {{4, 1}, {5, 
    1}, {3, 6}}, {{1, 2}, {2, 3}} -> {{4, 2}, {5, 2}, {1, 6}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {5, 2}, {3, 6}}, {{1, 2}, {2, 3}} -> {{4, 
    3}, {5, 3}, {1, 6}}, {{1, 2}, {2, 3}} -> {{4, 3}, {5, 3}, {2, 
    6}}, {{1, 2}, {1, 3}} -> {{4, 1}, {5, 1}, {6, 1}}, {{1, 2}, {1, 
    3}} -> {{4, 1}, {5, 1}, {6, 2}}, {{1, 2}, {1, 3}} -> {{4, 1}, {5, 
    2}, {6, 3}}, {{1, 2}, {1, 3}} -> {{4, 2}, {5, 2}, {6, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 2}, {5, 2}, {6, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    2}, {5, 2}, {6, 3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {5, 1}, {6, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 1}, {5, 1}, {6, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 1}, {5, 1}, {6, 3}}, {{1, 2}, {2, 3}} -> {{4, 1}, {5, 
    2}, {6, 3}}, {{1, 2}, {2, 3}} -> {{4, 2}, {5, 2}, {6, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 2}, {5, 2}, {6, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    2}, {5, 2}, {6, 3}}, {{1, 2}, {2, 3}} -> {{4, 3}, {5, 3}, {6, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 3}, {5, 3}, {6, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 3}, {5, 3}, {6, 3}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 
    1}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 1}, {5, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 5}, {4, 1}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    5}, {4, 2}, {1, 5}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 2}, {3, 
    5}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 2}, {5, 1}}, {{1, 2}, {1, 
    3}} -> {{4, 5}, {4, 2}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 
    2}, {5, 3}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 5}, {1, 4}}, {{1, 
    2}, {1, 3}} -> {{4, 5}, {4, 5}, {1, 5}}, {{1, 2}, {1, 3}} -> {{4, 
    5}, {4, 5}, {2, 4}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 5}, {2, 
    5}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 5}, {4, 1}}, {{1, 2}, {1, 
    3}} -> {{4, 5}, {4, 5}, {4, 2}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 
    5}, {5, 1}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 5}, {5, 2}}, {{1, 
    2}, {1, 3}} -> {{4, 5}, {5, 1}, {1, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    5}, {5, 1}, {2, 1}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 1}, {2, 
    3}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 2}, {1, 2}}, {{1, 2}, {1, 
    3}} -> {{4, 5}, {5, 2}, {1, 3}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 
    2}, {2, 1}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 2}, {2, 3}}, {{1, 
    2}, {1, 3}} -> {{4, 5}, {5, 2}, {3, 1}}, {{1, 2}, {1, 3}} -> {{4, 
    5}, {5, 2}, {3, 2}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 4}, {1, 
    4}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 4}, {2, 4}}, {{1, 2}, {1, 
    3}} -> {{4, 5}, {5, 4}, {4, 1}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 
    4}, {4, 2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 1}, {2, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {4, 1}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {4, 1}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 1}, {5, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 1}, {5, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {4, 2}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 
    2}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 2}, {5, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {4, 2}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {4, 2}, {5, 3}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 3}, {1, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 3}, {2, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {4, 3}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 
    3}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 3}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {4, 5}, {1, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {4, 5}, {1, 5}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 5}, {2, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 5}, {2, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {4, 5}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 
    5}, {3, 5}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 5}, {4, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {4, 5}, {4, 2}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {4, 5}, {4, 3}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 5}, {5, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 5}, {5, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {4, 5}, {5, 3}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 
    1}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 1}, {1, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {5, 1}, {2, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {5, 1}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 1}, {3, 
    1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 1}, {3, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {5, 2}, {1, 2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 
    2}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 2}, {2, 1}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {5, 2}, {2, 3}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {5, 2}, {3, 1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 2}, {3, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 3}, {1, 2}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {5, 3}, {1, 3}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 
    3}, {2, 1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 3}, {2, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {5, 3}, {3, 1}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {5, 3}, {3, 2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 4}, {1, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 4}, {2, 4}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {5, 4}, {3, 4}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 
    4}, {4, 1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 4}, {4, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {5, 4}, {4, 3}}, {{1, 2}, {1, 3}} -> {{4, 
    5}, {4, 1}, {5, 6}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 2}, {5, 
    6}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 1}, {1, 6}}, {{1, 2}, {1, 
    3}} -> {{4, 5}, {5, 1}, {2, 6}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 
    2}, {1, 6}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 2}, {2, 6}}, {{1, 
    2}, {1, 3}} -> {{4, 5}, {5, 2}, {3, 6}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {4, 1}, {5, 6}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 2}, {5, 
    6}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 3}, {5, 6}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {5, 1}, {1, 6}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 
    1}, {2, 6}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 1}, {3, 6}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {5, 2}, {1, 6}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {5, 2}, {2, 6}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 2}, {3, 
    6}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 3}, {1, 6}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {5, 3}, {2, 6}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 
    3}, {3, 6}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 1}, {6, 5}}, {{1, 
    2}, {1, 3}} -> {{4, 5}, {4, 2}, {6, 5}}, {{1, 2}, {1, 3}} -> {{4, 
    5}, {5, 1}, {6, 1}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 1}, {6, 
    2}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 1}, {6, 5}}, {{1, 2}, {1, 
    3}} -> {{4, 5}, {5, 2}, {6, 1}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 
    2}, {6, 2}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 2}, {6, 3}}, {{1, 
    2}, {1, 3}} -> {{4, 5}, {5, 2}, {6, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {4, 1}, {6, 5}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 2}, {6, 
    5}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 3}, {6, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {5, 1}, {6, 1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 
    1}, {6, 2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 1}, {6, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {5, 1}, {6, 5}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {5, 2}, {6, 1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 2}, {6, 
    2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 2}, {6, 3}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {5, 2}, {6, 5}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 
    3}, {6, 1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 3}, {6, 2}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {5, 3}, {6, 3}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {5, 3}, {6, 5}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 6}, {1, 
    4}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 6}, {1, 5}}, {{1, 2}, {1, 
    3}} -> {{4, 5}, {4, 6}, {2, 4}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 
    6}, {2, 5}}, {{1, 2}, {1, 3}} -> {{4, 5}, {4, 6}, {5, 1}}, {{1, 
    2}, {1, 3}} -> {{4, 5}, {4, 6}, {5, 2}}, {{1, 2}, {1, 3}} -> {{4, 
    5}, {5, 6}, {1, 6}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 6}, {2, 
    6}}, {{1, 2}, {1, 3}} -> {{4, 5}, {5, 6}, {6, 1}}, {{1, 2}, {1, 
    3}} -> {{4, 5}, {5, 6}, {6, 2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 
    6}, {1, 4}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 6}, {1, 5}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {4, 6}, {2, 4}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {4, 6}, {2, 5}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 6}, {3, 
    4}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 6}, {3, 5}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {4, 6}, {5, 1}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 
    6}, {5, 2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {4, 6}, {5, 3}}, {{1, 
    2}, {2, 3}} -> {{4, 5}, {5, 6}, {1, 6}}, {{1, 2}, {2, 3}} -> {{4, 
    5}, {5, 6}, {2, 6}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 6}, {3, 
    6}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 6}, {6, 1}}, {{1, 2}, {2, 
    3}} -> {{4, 5}, {5, 6}, {6, 2}}, {{1, 2}, {2, 3}} -> {{4, 5}, {5, 
    6}, {6, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 1}, {1, 1}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 1}, {1, 2}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 1}, {1, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 1}, {2, 
    1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 1}, {2, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {1, 1}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 
    1}, {3, 1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 1}, {3, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 1}, {3, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 2}, {1, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 2}, {1, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 2}, {2, 1}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {1, 2}, {2, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 
    2}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 2}, {3, 1}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 2}, {3, 2}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 2}, {3, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 3}, {1, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 3}, {2, 1}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {1, 3}, {2, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 
    3}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 3}, {3, 1}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 3}, {3, 2}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 3}, {3, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 1}, {2, 
    1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 1}, {2, 3}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {2, 1}, {3, 1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 
    1}, {3, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 1}, {3, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {2, 2}, {3, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {2, 3}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 3}, {3, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 1}, {2, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {3, 1}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 
    1}, {3, 1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 1}, {3, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {3, 2}, {3, 2}}, {{1, 2}, {3, 2}} -> {{1, 
    2}, {1, 2}, {1, 2}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 2}, {1, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 2}, {2, 1}}, {{1, 2}, {3, 
    2}} -> {{1, 2}, {1, 2}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 
    2}, {3, 1}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 2}, {3, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 2}, {1, 3}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    2}, {2, 1}, {1, 3}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 1}, {3, 
    1}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 3}, {3, 1}}, {{1, 2}, {3, 
    2}} -> {{1, 3}, {1, 2}, {3, 2}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 
    3}, {1, 2}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 3}, {1, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 3}, {1, 3}, {2, 1}}, {{1, 2}, {3, 2}} -> {{1, 
    3}, {1, 3}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 3}, {3, 
    1}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 3}, {3, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 3}, {3, 1}, {1, 2}}, {{1, 2}, {3, 2}} -> {{1, 3}, {3, 
    1}, {2, 1}}, {{1, 2}, {3, 2}} -> {{2, 1}, {1, 2}, {2, 3}}, {{1, 
    2}, {3, 2}} -> {{2, 1}, {1, 2}, {3, 2}}, {{1, 2}, {3, 2}} -> {{2, 
    1}, {2, 1}, {1, 2}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 1}, {1, 
    3}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 1}, {2, 1}}, {{1, 2}, {3, 
    2}} -> {{2, 1}, {2, 1}, {2, 3}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 
    1}, {3, 1}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 1}, {3, 2}}, {{1, 
    2}, {3, 2}} -> {{2, 1}, {2, 3}, {1, 3}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {1, 2}, {1, 2}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 2}, {1, 
    3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 2}, {3, 1}}, {{1, 2}, {3, 
    2}} -> {{2, 2}, {1, 2}, {3, 2}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 
    2}, {3, 3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 3}, {1, 3}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {1, 3}, {3, 1}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {2, 1}, {1, 1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 1}, {1, 
    2}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 1}, {1, 3}}, {{1, 2}, {3, 
    2}} -> {{2, 2}, {2, 1}, {2, 1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 
    1}, {2, 3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 1}, {3, 1}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {2, 1}, {3, 2}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {2, 1}, {3, 3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 2}, {1, 
    1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 2}, {1, 2}}, {{1, 2}, {3, 
    2}} -> {{2, 2}, {2, 2}, {1, 3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 
    2}, {2, 1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 2}, {2, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 1}, {1, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 1}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 1}, {3, 
    4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 2}, {1, 4}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {1, 2}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 
    2}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 3}, {1, 4}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 3}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 3}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 1}, {2, 
    4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 1}, {3, 4}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {2, 2}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 
    3}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 3}, {3, 4}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {3, 1}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {3, 1}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 2}, {2, 
    4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 2}, {3, 4}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {3, 3}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 
    2}, {1, 4}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 2}, {2, 4}}, {{1, 
    2}, {3, 2}} -> {{1, 2}, {1, 2}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    2}, {1, 3}, {1, 4}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 3}, {2, 
    4}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 1}, {1, 4}}, {{1, 2}, {3, 
    2}} -> {{1, 2}, {2, 1}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 
    3}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 2}, {3, 4}}, {{1, 
    2}, {3, 2}} -> {{1, 3}, {1, 3}, {1, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    3}, {1, 3}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 3}, {3, 
    4}}, {{1, 2}, {3, 2}} -> {{1, 3}, {3, 1}, {1, 4}}, {{1, 2}, {3, 
    2}} -> {{1, 3}, {3, 1}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 3}, {3, 
    2}, {2, 4}}, {{1, 2}, {3, 2}} -> {{2, 1}, {1, 2}, {2, 4}}, {{1, 
    2}, {3, 2}} -> {{2, 1}, {1, 3}, {3, 4}}, {{1, 2}, {3, 2}} -> {{2, 
    1}, {2, 1}, {1, 4}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 1}, {2, 
    4}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 1}, {3, 4}}, {{1, 2}, {3, 
    2}} -> {{2, 1}, {2, 3}, {1, 4}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 
    3}, {2, 4}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 2}, {1, 4}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {1, 2}, {3, 4}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {1, 3}, {1, 4}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 3}, {3, 
    4}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 1}, {1, 4}}, {{1, 2}, {3, 
    2}} -> {{2, 2}, {2, 1}, {2, 4}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 
    1}, {3, 4}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 2}, {1, 4}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {2, 2}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 1}, {4, 1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 1}, {4, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 1}, {4, 3}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {1, 2}, {4, 1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 
    2}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 2}, {4, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 3}, {4, 1}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 3}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 3}, {4, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 1}, {4, 1}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {2, 1}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 
    1}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 2}, {4, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {2, 3}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {3, 1}, {4, 1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 1}, {4, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 1}, {4, 3}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {3, 2}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 
    3}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 2}, {4, 1}}, {{1, 
    2}, {3, 2}} -> {{1, 2}, {1, 2}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 
    2}, {1, 2}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 3}, {4, 
    1}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 3}, {4, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 2}, {2, 1}, {4, 1}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 
    1}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 3}, {4, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 2}, {2, 3}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    2}, {3, 2}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 2}, {4, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 3}, {4, 1}}, {{1, 2}, {3, 
    2}} -> {{1, 3}, {1, 3}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 
    3}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 3}, {2, 3}, {4, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 3}, {3, 1}, {4, 1}}, {{1, 2}, {3, 2}} -> {{1, 
    3}, {3, 1}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 3}, {3, 2}, {4, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 3}, {3, 2}, {4, 3}}, {{1, 2}, {3, 
    2}} -> {{2, 1}, {1, 2}, {4, 2}}, {{1, 2}, {3, 2}} -> {{2, 1}, {1, 
    3}, {4, 1}}, {{1, 2}, {3, 2}} -> {{2, 1}, {1, 3}, {4, 3}}, {{1, 
    2}, {3, 2}} -> {{2, 1}, {2, 1}, {4, 1}}, {{1, 2}, {3, 2}} -> {{2, 
    1}, {2, 1}, {4, 2}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 1}, {4, 
    3}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 3}, {4, 1}}, {{1, 2}, {3, 
    2}} -> {{2, 1}, {2, 3}, {4, 2}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 
    2}, {4, 1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 2}, {4, 2}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {1, 2}, {4, 3}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {1, 3}, {4, 3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 1}, {4, 
    1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 1}, {4, 2}}, {{1, 2}, {3, 
    2}} -> {{2, 2}, {2, 1}, {4, 3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 
    2}, {4, 1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 2}, {4, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 4}, {1, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 4}, {2, 1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 4}, {2, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 4}, {2, 3}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {1, 4}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 
    4}, {3, 1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 4}, {3, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 4}, {3, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 4}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 4}, {4, 
    1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 4}, {4, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {1, 4}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 
    4}, {4, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 4}, {2, 4}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {2, 4}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {2, 4}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 4}, {4, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 4}, {3, 4}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {3, 4}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 
    4}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 4}, {2, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 2}, {1, 4}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    2}, {1, 4}, {3, 1}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 4}, {3, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 4}, {3, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 2}, {2, 4}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 
    4}, {4, 1}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 4}, {4, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 3}, {1, 4}, {2, 1}}, {{1, 2}, {3, 2}} -> {{1, 
    3}, {1, 4}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 4}, {3, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 4}, {3, 4}}, {{1, 2}, {3, 
    2}} -> {{1, 3}, {3, 4}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 3}, {3, 
    4}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 3}, {3, 4}, {4, 1}}, {{1, 
    2}, {3, 2}} -> {{1, 3}, {3, 4}, {4, 2}}, {{1, 2}, {3, 2}} -> {{2, 
    1}, {1, 4}, {3, 4}}, {{1, 2}, {3, 2}} -> {{2, 1}, {1, 4}, {4, 
    3}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 4}, {1, 3}}, {{1, 2}, {3, 
    2}} -> {{2, 1}, {2, 4}, {1, 4}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 
    4}, {3, 1}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 4}, {3, 2}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {1, 4}, {1, 4}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {1, 4}, {3, 4}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 4}, {4, 
    1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 4}, {4, 3}}, {{1, 2}, {3, 
    2}} -> {{2, 2}, {2, 4}, {1, 1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 
    4}, {1, 2}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 4}, {1, 3}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {2, 4}, {1, 4}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {2, 4}, {2, 4}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 4}, {4, 
    1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 4}, {4, 2}}, {{1, 2}, {3, 
    2}} -> {{2, 2}, {2, 4}, {4, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 
    4}, {1, 5}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 4}, {2, 5}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 4}, {3, 5}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 4}, {4, 5}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 4}, {2, 
    5}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 4}, {3, 5}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {2, 4}, {4, 5}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 
    4}, {3, 5}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 4}, {4, 5}}, {{1, 
    2}, {3, 2}} -> {{1, 2}, {1, 4}, {1, 5}}, {{1, 2}, {3, 2}} -> {{1, 
    2}, {1, 4}, {2, 5}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 4}, {3, 
    5}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 4}, {3, 5}}, {{1, 2}, {3, 
    2}} -> {{1, 2}, {2, 4}, {4, 5}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 
    4}, {1, 5}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 4}, {2, 5}}, {{1, 
    2}, {3, 2}} -> {{1, 3}, {1, 4}, {3, 5}}, {{1, 2}, {3, 2}} -> {{1, 
    3}, {3, 4}, {2, 5}}, {{1, 2}, {3, 2}} -> {{1, 3}, {3, 4}, {4, 
    5}}, {{1, 2}, {3, 2}} -> {{2, 1}, {1, 4}, {3, 5}}, {{1, 2}, {3, 
    2}} -> {{2, 1}, {1, 4}, {4, 5}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 
    4}, {1, 5}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 4}, {2, 5}}, {{1, 
    2}, {3, 2}} -> {{2, 1}, {2, 4}, {3, 5}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {1, 4}, {1, 5}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 4}, {3, 
    5}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 4}, {4, 5}}, {{1, 2}, {3, 
    2}} -> {{2, 2}, {2, 4}, {1, 5}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 
    4}, {2, 5}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 4}, {4, 5}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {1, 4}, {5, 1}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {1, 4}, {5, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 4}, {5, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {1, 4}, {5, 4}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {2, 4}, {5, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {2, 
    4}, {5, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {3, 4}, {5, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {3, 4}, {5, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    2}, {1, 4}, {5, 1}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 4}, {5, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 2}, {1, 4}, {5, 3}}, {{1, 2}, {3, 
    2}} -> {{1, 2}, {2, 4}, {5, 2}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 
    4}, {5, 3}}, {{1, 2}, {3, 2}} -> {{1, 2}, {2, 4}, {5, 4}}, {{1, 
    2}, {3, 2}} -> {{1, 3}, {1, 4}, {5, 1}}, {{1, 2}, {3, 2}} -> {{1, 
    3}, {1, 4}, {5, 2}}, {{1, 2}, {3, 2}} -> {{1, 3}, {1, 4}, {5, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 3}, {3, 4}, {5, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 3}, {3, 4}, {5, 3}}, {{1, 2}, {3, 2}} -> {{1, 3}, {3, 
    4}, {5, 4}}, {{1, 2}, {3, 2}} -> {{2, 1}, {1, 4}, {5, 1}}, {{1, 
    2}, {3, 2}} -> {{2, 1}, {1, 4}, {5, 3}}, {{1, 2}, {3, 2}} -> {{2, 
    1}, {1, 4}, {5, 4}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 4}, {5, 
    1}}, {{1, 2}, {3, 2}} -> {{2, 1}, {2, 4}, {5, 2}}, {{1, 2}, {3, 
    2}} -> {{2, 1}, {2, 4}, {5, 3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 
    4}, {5, 3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {1, 4}, {5, 4}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {2, 4}, {5, 1}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {2, 4}, {5, 2}}, {{1, 2}, {3, 2}} -> {{2, 2}, {2, 4}, {5, 
    4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 1}, {2, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {4, 1}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 
    1}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 1}, {3, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {4, 1}, {3, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {4, 1}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 1}, {4, 
    1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 1}, {4, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {4, 1}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 
    2}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 2}, {4, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {4, 2}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {4, 3}, {3, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 3}, {4, 
    3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 1}, {1, 3}}, {{1, 2}, {3, 
    2}} -> {{2, 2}, {4, 1}, {4, 1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 
    1}, {4, 3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 2}, {1, 1}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {4, 2}, {1, 3}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {4, 2}, {1, 4}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 2}, {4, 
    1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 2}, {4, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {4, 1}, {2, 5}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 
    1}, {3, 5}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 1}, {4, 5}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {4, 2}, {2, 5}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {4, 2}, {4, 5}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 3}, {3, 
    5}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 3}, {4, 5}}, {{1, 2}, {3, 
    2}} -> {{1, 2}, {4, 2}, {3, 5}}, {{1, 2}, {3, 2}} -> {{1, 3}, {4, 
    3}, {2, 5}}, {{1, 2}, {3, 2}} -> {{2, 1}, {4, 1}, {3, 5}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {4, 1}, {1, 5}}, {{1, 2}, {3, 2}} -> {{2, 
    2}, {4, 1}, {4, 5}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 2}, {1, 
    5}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 2}, {4, 5}}, {{1, 2}, {3, 
    2}} -> {{1, 1}, {4, 1}, {5, 1}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 
    1}, {5, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 1}, {5, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 1}, {4, 1}, {5, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {4, 2}, {5, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 2}, {5, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 3}, {5, 3}}, {{1, 2}, {3, 
    2}} -> {{1, 2}, {4, 2}, {5, 2}}, {{1, 2}, {3, 2}} -> {{1, 2}, {4, 
    2}, {5, 3}}, {{1, 2}, {3, 2}} -> {{1, 3}, {4, 3}, {5, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 3}, {4, 3}, {5, 3}}, {{1, 2}, {3, 2}} -> {{2, 
    1}, {4, 1}, {5, 1}}, {{1, 2}, {3, 2}} -> {{2, 1}, {4, 1}, {5, 
    3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 1}, {5, 1}}, {{1, 2}, {3, 
    2}} -> {{2, 2}, {4, 1}, {5, 3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 
    2}, {5, 1}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 2}, {5, 2}}, {{1, 
    2}, {3, 2}} -> {{2, 2}, {4, 2}, {5, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    1}, {4, 5}, {5, 2}}, {{1, 2}, {3, 2}} -> {{1, 1}, {4, 5}, {5, 
    3}}, {{1, 2}, {3, 2}} -> {{2, 2}, {4, 5}, {5, 1}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {1, 2}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 
    2}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 2}, {4, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {1, 3}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {1, 3}, {4, 2}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 3}, {4, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 4}, {1, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {1, 4}, {1, 3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 
    4}, {1, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 4}, {2, 1}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {1, 4}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {1, 4}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 4}, {3, 
    1}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 4}, {3, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {1, 4}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 
    4}, {4, 1}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 4}, {4, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {1, 4}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {2, 4}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 1}, {1, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 1}, {1, 3}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {4, 1}, {2, 1}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 
    1}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 1}, {3, 1}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {4, 1}, {3, 2}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {4, 2}, {2, 1}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 2}, {2, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 2}, {3, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {4, 2}, {3, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 
    3}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 3}, {2, 4}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {4, 3}, {3, 2}}, {{1, 2}, {3, 2}} -> {{2, 
    4}, {2, 1}, {3, 4}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 1}, {4, 
    1}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 1}, {4, 3}}, {{1, 2}, {3, 
    2}} -> {{2, 4}, {2, 4}, {1, 2}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 
    4}, {1, 3}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 4}, {1, 4}}, {{1, 
    2}, {3, 2}} -> {{2, 4}, {2, 4}, {2, 1}}, {{1, 2}, {3, 2}} -> {{2, 
    4}, {2, 4}, {2, 4}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 4}, {4, 
    1}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 4}, {4, 2}}, {{1, 2}, {3, 
    2}} -> {{2, 4}, {4, 1}, {1, 3}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 
    1}, {3, 1}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 2}, {1, 2}}, {{1, 
    2}, {3, 2}} -> {{2, 4}, {4, 2}, {1, 3}}, {{1, 2}, {3, 2}} -> {{2, 
    4}, {4, 2}, {2, 1}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 2}, {4, 
    5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 3}, {4, 5}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {1, 4}, {1, 5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 
    4}, {2, 5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 4}, {3, 5}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {1, 4}, {4, 5}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {2, 4}, {3, 5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {3, 4}, {2, 
    5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 1}, {1, 5}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {4, 1}, {2, 5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 
    1}, {3, 5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 2}, {2, 5}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {4, 2}, {3, 5}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {4, 3}, {2, 5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 3}, {3, 
    5}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 1}, {4, 5}}, {{1, 2}, {3, 
    2}} -> {{2, 4}, {2, 4}, {1, 5}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 
    4}, {2, 5}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 4}, {4, 5}}, {{1, 
    2}, {3, 2}} -> {{2, 4}, {4, 1}, {1, 5}}, {{1, 2}, {3, 2}} -> {{2, 
    4}, {4, 1}, {3, 5}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 2}, {1, 
    5}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 2}, {2, 5}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {1, 2}, {5, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 
    3}, {5, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 4}, {5, 1}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {1, 4}, {5, 2}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {1, 4}, {5, 3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 4}, {5, 
    4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {2, 4}, {5, 3}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {2, 4}, {5, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {3, 
    4}, {5, 2}}, {{1, 2}, {3, 2}} -> {{1, 4}, {3, 4}, {5, 4}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {4, 1}, {5, 1}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {4, 1}, {5, 2}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 1}, {5, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 2}, {5, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {4, 2}, {5, 3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 
    2}, {5, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 3}, {5, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {4, 3}, {5, 3}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {4, 3}, {5, 4}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 1}, {5, 
    4}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 4}, {5, 1}}, {{1, 2}, {3, 
    2}} -> {{2, 4}, {2, 4}, {5, 2}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 
    4}, {5, 4}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 1}, {5, 1}}, {{1, 
    2}, {3, 2}} -> {{2, 4}, {4, 1}, {5, 3}}, {{1, 2}, {3, 2}} -> {{2, 
    4}, {4, 1}, {5, 4}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 2}, {5, 
    1}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 2}, {5, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {1, 5}, {2, 1}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 
    5}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 5}, {2, 4}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {1, 5}, {3, 1}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {1, 5}, {3, 2}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 5}, {3, 
    4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 5}, {4, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {1, 5}, {4, 3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 
    5}, {4, 5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 5}, {2, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {4, 5}, {2, 4}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {4, 5}, {2, 5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 5}, {3, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 5}, {3, 4}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {4, 5}, {3, 5}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 
    5}, {5, 1}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 5}, {5, 2}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {4, 5}, {5, 3}}, {{1, 2}, {3, 2}} -> {{2, 
    4}, {2, 5}, {1, 2}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 5}, {1, 
    3}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 5}, {1, 4}}, {{1, 2}, {3, 
    2}} -> {{2, 4}, {2, 5}, {4, 1}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 
    5}, {4, 5}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 5}, {1, 3}}, {{1, 
    2}, {3, 2}} -> {{2, 4}, {4, 5}, {1, 5}}, {{1, 2}, {3, 2}} -> {{2, 
    4}, {4, 5}, {5, 1}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 5}, {5, 
    2}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 5}, {1, 6}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {1, 5}, {2, 6}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 
    5}, {3, 6}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 5}, {4, 6}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {2, 5}, {3, 6}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {4, 5}, {2, 6}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 5}, {3, 
    6}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 5}, {5, 6}}, {{1, 2}, {3, 
    2}} -> {{2, 4}, {2, 5}, {1, 6}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 
    5}, {2, 6}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 5}, {4, 6}}, {{1, 
    2}, {3, 2}} -> {{2, 4}, {4, 5}, {1, 6}}, {{1, 2}, {3, 2}} -> {{2, 
    4}, {4, 5}, {5, 6}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 5}, {6, 
    1}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 5}, {6, 2}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {1, 5}, {6, 3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {1, 
    5}, {6, 4}}, {{1, 2}, {3, 2}} -> {{1, 4}, {2, 5}, {6, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {3, 5}, {6, 2}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {4, 5}, {6, 2}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 5}, {6, 
    3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {4, 5}, {6, 4}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {4, 5}, {6, 5}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 
    5}, {6, 1}}, {{1, 2}, {3, 2}} -> {{2, 4}, {2, 5}, {6, 2}}, {{1, 
    2}, {3, 2}} -> {{2, 4}, {2, 5}, {6, 4}}, {{1, 2}, {3, 2}} -> {{2, 
    4}, {4, 5}, {6, 1}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 5}, {6, 
    4}}, {{1, 2}, {3, 2}} -> {{2, 4}, {4, 5}, {6, 5}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {5, 4}, {2, 3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {5, 
    4}, {3, 2}}, {{1, 2}, {3, 2}} -> {{2, 4}, {5, 4}, {1, 3}}, {{1, 
    2}, {3, 2}} -> {{1, 4}, {5, 4}, {2, 6}}, {{1, 2}, {3, 2}} -> {{1, 
    4}, {5, 4}, {3, 6}}, {{1, 2}, {3, 2}} -> {{2, 4}, {5, 4}, {1, 
    6}}, {{1, 2}, {3, 2}} -> {{1, 4}, {5, 2}, {6, 3}}, {{1, 2}, {3, 
    2}} -> {{1, 4}, {5, 4}, {6, 2}}, {{1, 2}, {3, 2}} -> {{1, 4}, {5, 
    4}, {6, 3}}, {{1, 2}, {3, 2}} -> {{1, 4}, {5, 4}, {6, 4}}, {{1, 
    2}, {3, 2}} -> {{2, 4}, {5, 1}, {6, 3}}, {{1, 2}, {3, 2}} -> {{2, 
    4}, {5, 4}, {6, 1}}, {{1, 2}, {3, 2}} -> {{2, 4}, {5, 4}, {6, 
    4}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 2}, {2, 3}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {1, 2}, {3, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 
    3}, {2, 3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 3}, {3, 2}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {1, 4}, {2, 4}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {1, 4}, {3, 4}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 4}, {4, 
    2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 4}, {4, 3}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {4, 1}, {1, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 
    1}, {1, 3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 1}, {1, 4}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {4, 1}, {2, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {4, 1}, {2, 3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 1}, {2, 
    4}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 1}, {3, 1}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {4, 1}, {3, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 
    1}, {3, 4}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 1}, {4, 1}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {4, 1}, {4, 2}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {4, 1}, {4, 3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 2}, {1, 
    2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 2}, {1, 3}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {4, 2}, {3, 1}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 
    2}, {3, 4}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 2}, {4, 3}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {4, 3}, {1, 2}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {4, 3}, {1, 3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 3}, {2, 
    1}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 3}, {2, 4}}, {{1, 2}, {3, 
    2}} -> {{4, 2}, {2, 1}, {1, 3}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 
    1}, {3, 1}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 4}, {1, 4}}, {{1, 
    2}, {3, 2}} -> {{4, 2}, {2, 4}, {4, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    2}, {4, 1}, {2, 1}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 1}, {2, 
    3}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 1}, {3, 2}}, {{1, 2}, {3, 
    2}} -> {{4, 2}, {4, 2}, {1, 2}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 
    2}, {1, 3}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 2}, {1, 4}}, {{1, 
    2}, {3, 2}} -> {{4, 2}, {4, 2}, {2, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    2}, {4, 2}, {2, 4}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 2}, {4, 
    1}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 2}, {4, 2}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {1, 4}, {1, 2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {1, 
    4}, {1, 3}}, {{1, 2}, {3, 2}} -> {{4, 4}, {1, 4}, {1, 4}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {1, 4}, {2, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {1, 4}, {2, 2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {1, 4}, {2, 
    3}}, {{1, 2}, {3, 2}} -> {{4, 4}, {1, 4}, {2, 4}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {1, 4}, {3, 1}}, {{1, 2}, {3, 2}} -> {{4, 4}, {1, 
    4}, {3, 2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {1, 4}, {3, 3}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {1, 4}, {3, 4}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {2, 4}, {1, 1}}, {{1, 2}, {3, 2}} -> {{4, 4}, {2, 4}, {1, 
    2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {2, 4}, {1, 3}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {2, 4}, {2, 1}}, {{1, 2}, {3, 2}} -> {{4, 4}, {2, 
    4}, {2, 4}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 1}, {1, 1}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {4, 1}, {1, 2}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {4, 1}, {1, 3}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 1}, {1, 
    4}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 1}, {2, 1}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {4, 1}, {2, 2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 
    1}, {2, 3}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 1}, {2, 4}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {4, 1}, {3, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {4, 1}, {3, 2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 1}, {3, 
    3}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 1}, {3, 4}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {4, 1}, {4, 1}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 
    1}, {4, 2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 1}, {4, 3}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {4, 2}, {1, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {4, 2}, {1, 2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 2}, {1, 
    3}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 2}, {1, 4}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {4, 2}, {2, 1}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 
    2}, {2, 2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 2}, {2, 4}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {4, 2}, {4, 2}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {4, 4}, {1, 4}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 4}, {2, 
    4}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 4}, {4, 1}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {4, 4}, {4, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 
    2}, {2, 5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 2}, {3, 5}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {1, 3}, {2, 5}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {1, 3}, {3, 5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 4}, {4, 
    5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 1}, {1, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {4, 1}, {2, 5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 
    1}, {3, 5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 1}, {4, 5}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {4, 2}, {1, 5}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {4, 2}, {3, 5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 2}, {4, 
    5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 3}, {1, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {4, 3}, {2, 5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 
    3}, {4, 5}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 1}, {1, 5}}, {{1, 
    2}, {3, 2}} -> {{4, 2}, {2, 1}, {3, 5}}, {{1, 2}, {3, 2}} -> {{4, 
    2}, {2, 4}, {4, 5}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 1}, {2, 
    5}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 2}, {1, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 2}, {4, 2}, {2, 5}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 
    2}, {4, 5}}, {{1, 2}, {3, 2}} -> {{4, 4}, {1, 4}, {1, 5}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {1, 4}, {2, 5}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {1, 4}, {3, 5}}, {{1, 2}, {3, 2}} -> {{4, 4}, {2, 4}, {1, 
    5}}, {{1, 2}, {3, 2}} -> {{4, 4}, {2, 4}, {2, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {4, 1}, {1, 5}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 
    1}, {2, 5}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 1}, {3, 5}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {4, 1}, {4, 5}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {4, 2}, {1, 5}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 2}, {2, 
    5}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 2}, {4, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {1, 2}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 
    2}, {5, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 2}, {5, 3}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {1, 3}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {1, 3}, {5, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 3}, {5, 
    3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 4}, {5, 4}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {4, 1}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 
    1}, {5, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 1}, {5, 3}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {4, 1}, {5, 4}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {4, 2}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 2}, {5, 
    3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 2}, {5, 4}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {4, 3}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 
    3}, {5, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 3}, {5, 4}}, {{1, 
    2}, {3, 2}} -> {{4, 2}, {2, 1}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    2}, {2, 1}, {5, 2}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 1}, {5, 
    3}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 4}, {5, 4}}, {{1, 2}, {3, 
    2}} -> {{4, 2}, {4, 1}, {5, 2}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 
    2}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 2}, {5, 2}}, {{1, 
    2}, {3, 2}} -> {{4, 2}, {4, 2}, {5, 4}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {1, 4}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 4}, {1, 4}, {5, 
    2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {1, 4}, {5, 3}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {1, 4}, {5, 4}}, {{1, 2}, {3, 2}} -> {{4, 4}, {2, 
    4}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 4}, {2, 4}, {5, 2}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {2, 4}, {5, 4}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {4, 1}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 1}, {5, 
    2}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 1}, {5, 3}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {4, 1}, {5, 4}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 
    2}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 2}, {5, 2}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {4, 2}, {5, 4}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {1, 5}, {2, 3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 5}, {2, 
    5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 5}, {3, 2}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {1, 5}, {3, 5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 
    5}, {5, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 5}, {5, 3}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {4, 5}, {1, 2}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {4, 5}, {1, 3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 5}, {1, 
    5}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 5}, {2, 1}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {4, 5}, {2, 3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 
    5}, {2, 4}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 5}, {3, 1}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {4, 5}, {3, 2}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {4, 5}, {3, 4}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 5}, {1, 
    3}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 5}, {1, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 2}, {2, 5}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 
    5}, {1, 2}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 5}, {1, 3}}, {{1, 
    2}, {3, 2}} -> {{4, 2}, {4, 5}, {1, 4}}, {{1, 2}, {3, 2}} -> {{4, 
    2}, {4, 5}, {2, 1}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 5}, {2, 
    5}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 5}, {1, 4}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {4, 5}, {1, 5}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 
    5}, {2, 4}}, {{1, 2}, {3, 2}} -> {{4, 4}, {4, 5}, {2, 5}}, {{1, 
    2}, {3, 2}} -> {{4, 4}, {4, 5}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    4}, {4, 5}, {5, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 5}, {2, 
    6}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 5}, {3, 6}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {1, 5}, {5, 6}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 
    5}, {1, 6}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 5}, {2, 6}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {4, 5}, {3, 6}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {4, 5}, {4, 6}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 5}, {1, 
    6}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 5}, {5, 6}}, {{1, 2}, {3, 
    2}} -> {{4, 2}, {4, 5}, {1, 6}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 
    5}, {2, 6}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 5}, {4, 6}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {1, 5}, {6, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {1, 5}, {6, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 5}, {6, 
    3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {1, 5}, {6, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {4, 5}, {6, 1}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 
    5}, {6, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {4, 5}, {6, 3}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {4, 5}, {6, 4}}, {{1, 2}, {3, 2}} -> {{4, 
    2}, {2, 5}, {6, 1}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 5}, {6, 
    2}}, {{1, 2}, {3, 2}} -> {{4, 2}, {2, 5}, {6, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 2}, {4, 5}, {6, 1}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 
    5}, {6, 2}}, {{1, 2}, {3, 2}} -> {{4, 2}, {4, 5}, {6, 4}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {5, 1}, {2, 3}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {5, 1}, {3, 2}}, {{1, 2}, {3, 2}} -> {{4, 2}, {5, 2}, {1, 
    3}}, {{1, 2}, {3, 2}} -> {{4, 4}, {5, 4}, {1, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 4}, {5, 4}, {2, 5}}, {{1, 2}, {3, 2}} -> {{4, 4}, {5, 
    4}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 4}, {5, 4}, {5, 2}}, {{1, 
    2}, {3, 2}} -> {{4, 1}, {5, 1}, {2, 6}}, {{1, 2}, {3, 2}} -> {{4, 
    1}, {5, 1}, {3, 6}}, {{1, 2}, {3, 2}} -> {{4, 2}, {5, 2}, {1, 
    6}}, {{1, 2}, {3, 2}} -> {{4, 1}, {5, 1}, {6, 1}}, {{1, 2}, {3, 
    2}} -> {{4, 1}, {5, 1}, {6, 2}}, {{1, 2}, {3, 2}} -> {{4, 1}, {5, 
    1}, {6, 3}}, {{1, 2}, {3, 2}} -> {{4, 1}, {5, 2}, {6, 3}}, {{1, 
    2}, {3, 2}} -> {{4, 2}, {5, 2}, {6, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    2}, {5, 2}, {6, 2}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 1}, {2, 
    5}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 1}, {3, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 5}, {4, 1}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 
    1}, {5, 2}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 1}, {5, 3}}, {{1, 
    2}, {3, 2}} -> {{4, 5}, {4, 2}, {1, 5}}, {{1, 2}, {3, 2}} -> {{4, 
    5}, {4, 2}, {5, 1}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 2}, {5, 
    2}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 5}, {1, 4}}, {{1, 2}, {3, 
    2}} -> {{4, 5}, {4, 5}, {1, 5}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 
    5}, {2, 4}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 5}, {2, 5}}, {{1, 
    2}, {3, 2}} -> {{4, 5}, {4, 5}, {4, 1}}, {{1, 2}, {3, 2}} -> {{4, 
    5}, {4, 5}, {4, 2}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 5}, {5, 
    1}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 5}, {5, 2}}, {{1, 2}, {3, 
    2}} -> {{4, 5}, {5, 1}, {1, 2}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 
    1}, {1, 3}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 1}, {2, 1}}, {{1, 
    2}, {3, 2}} -> {{4, 5}, {5, 1}, {2, 3}}, {{1, 2}, {3, 2}} -> {{4, 
    5}, {5, 1}, {3, 1}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 1}, {3, 
    2}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 2}, {1, 2}}, {{1, 2}, {3, 
    2}} -> {{4, 5}, {5, 2}, {1, 3}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 
    2}, {2, 1}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 4}, {1, 4}}, {{1, 
    2}, {3, 2}} -> {{4, 5}, {5, 4}, {2, 4}}, {{1, 2}, {3, 2}} -> {{4, 
    5}, {5, 4}, {4, 1}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 4}, {4, 
    2}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 1}, {5, 6}}, {{1, 2}, {3, 
    2}} -> {{4, 5}, {4, 2}, {5, 6}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 
    1}, {1, 6}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 1}, {2, 6}}, {{1, 
    2}, {3, 2}} -> {{4, 5}, {5, 1}, {3, 6}}, {{1, 2}, {3, 2}} -> {{4, 
    5}, {5, 2}, {1, 6}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 2}, {2, 
    6}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 1}, {6, 5}}, {{1, 2}, {3, 
    2}} -> {{4, 5}, {4, 2}, {6, 5}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 
    1}, {6, 1}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 1}, {6, 2}}, {{1, 
    2}, {3, 2}} -> {{4, 5}, {5, 1}, {6, 3}}, {{1, 2}, {3, 2}} -> {{4, 
    5}, {5, 1}, {6, 5}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 2}, {6, 
    1}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 2}, {6, 2}}, {{1, 2}, {3, 
    2}} -> {{4, 5}, {5, 2}, {6, 5}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 
    6}, {1, 4}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 6}, {1, 5}}, {{1, 
    2}, {3, 2}} -> {{4, 5}, {4, 6}, {2, 4}}, {{1, 2}, {3, 2}} -> {{4, 
    5}, {4, 6}, {2, 5}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 6}, {5, 
    1}}, {{1, 2}, {3, 2}} -> {{4, 5}, {4, 6}, {5, 2}}, {{1, 2}, {3, 
    2}} -> {{4, 5}, {5, 6}, {1, 6}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 
    6}, {2, 6}}, {{1, 2}, {3, 2}} -> {{4, 5}, {5, 6}, {6, 1}}, {{1, 
    2}, {3, 2}} -> {{4, 5}, {5, 6}, {6, 2}}};
gres = {#[[1]], CanonicalGraph[#[[2]]]} & /@ 
   ResourceFunction["ParallelMapMonitored"][
    Function[ru, 
     TimeConstrained[
      With[{gs = 
         ResourceFunction["CausalConnectionGraph"][
          ResourceFunction["WolframModel"][ru, Automatic, #, 
            "LayeredCausalGraph"] &, 5, 10]}, {ru, IndexGraph[gs]}], 
      5]], allrules32];
Text /@ Counts[
  Framed[Graph[Last[#], ImageSize -> {80, 80}, 
      EdgeStyle -> 
       Directive[RGBColor[0.68, 0.3, 0.], Thickness[Large]], 
      VertexStyle -> RGBColor[0.853, 0.65, 0.3], VertexSize -> .15], 
     FrameStyle -> LightGray] & /@ gres]

Nearly 40% of these rules give causal graphs that terminate before 10 steps, corresponding to “universe-scale” spacelike singularities. Of the remainder, 76% produce no event horizons (at least at the steps we’re measuring). Then the next most common behavior is to generate “subuniverses” separated by cosmological event horizons. And then there are black holes. In aggregate these are produced in about 3% of cases. The most common is a single black hole, followed by a black hole combined with a subuniverse, two black holes, etc.

There are also more exotic cases, like the last case shown. The rule here is:

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 2}, {3, 2}} -> {{4, 1}, {4, 3}, {1, 2}}]]

And here is the causal graph:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {3, 2}} -> {{4, 1}, {4, 3}, {1, 
    2}}, Automatic, 17, "LayeredCausalGraph"]

This is how the causal connection graph develops at successive steps:

Table
&#10005

Table[Graph[
  ResourceFunction["CausalConnectionGraph"][
   ResourceFunction[
      "WolframModel"][{{1, 2}, {3, 2}} -> {{4, 1}, {4, 3}, {1, 2}}, 
     Automatic, #, "LayeredCausalGraph"] &, t, 20], VertexSize -> .1, 
  ImageSize -> 60], {t, 8}]

It takes a few steps for “black holes to form”. But in the end, we get what we can interpret as a nested set of black holes. The causally equivalent events corresponding to the node at the top have future light cones that eventually cover the universe. But events associated with “lower” nodes yield progressively more localized future light cones:

With
&#10005

With[{gg = 
     Graph[ResourceFunction[
        "WolframModel"][{{1, 2}, {3, 2}} -> {{4, 1}, {4, 3}, {1, 2}}, 
       Automatic, 14, "LayeredCausalGraph"]]}, 
   HighlightGraph[
    gg, {Style[Subgraph[gg, VertexOutComponent[gg, #, 20]], Red, 
      Thick]}, ImageSize -> 200, AspectRatio -> 1/2]] & /@ {12, 13, 
  14, 15}

Here’s what’s going on in the spatial hypergraph:

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, ImageSize -> Tiny] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 2}, {3, 2}} -> {{4, 1}, {4, 3}, {1, 2}}, 
  Automatic, 15, "StatesList"]

Once again, it’s at first pretty obscure where the “black holes” are. It’s mildly helpful to see individual events. What seems to be happening is that the “exterior of the universe” is the main loop. But somehow information can get propagated into the “long hair”, but then can’t get out again.

Show
&#10005

Show[#, ImageSize -> {50, 50}] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 2}, {3, 2}} -> {{4, 1}, {4, 3}, {1, 2}}, 
  Automatic, 12, "EventsStatesPlotsList"]

What is the analog of all this in ordinary continuum general relativity? Presumably it’s some kind of nested black hole phenomenon. Inside the event horizon of a black hole other black holes form. Perhaps all these black holes in some sense eventually merge (as the singularity theorem might seem to suggest), or perhaps there’s some structure with multiple levels of event horizons, as roughly happens in the Kerr solution.

Properties of Black Holes

When there’s a black hole in our models, what can one tell about what’s inside it? Causal edges go into the event horizon, but none come out. However, that does not mean that the structure of the spatial hypergraph doesn’t reflect what’s inside the event horizon. After all, every causal edge that crosses the event horizon originated in an event outside the event horizon. And that event represented some update in the spatial hypergraph. Or, in other words, while causal edges are “lost” into the event horizon, the “memory” of what they did is progressively imprinted in the spatial hypergraph outside the event horizon.

In ordinary general relativity, there are “no-hair” theorems that say that the gravitational effects of a black hole depend only on a few parameters, such as its overall mass and overall angular momentum. In our models, the overall mass is essentially just determined by the number of causal edges that end up crossing the event horizon. (Angular momentum is related to a kind of vorticity in the causal graph.) So the no-hair theorem for mass says that when there is an event horizon, none of the details of these causal edges matter; only their total number. It’s not clear why this would be true, but it seems conceivable that it could be an essentially purely graph theoretic result.

There’s another potential effect, however. Consider the following causal graph:

With
&#10005

With[{gg = 
     Graph[ResourceFunction[
        "WolframModel"][{{1, 2}, {1, 3}} -> {{1, 2}, {2, 4}, {3, 4}}, 
       Automatic, 13, "LayeredCausalGraph"]]}, 
   HighlightGraph[
    gg, {Style[Subgraph[gg, VertexOutComponent[gg, #, 20]], Red, 
      Thick], Style[Subgraph[gg, {8, 11, 13}], Purple, 
      Thickness[.025]]}, ImageSize -> 300]] &@13

The edges highlighted in red correspond in effect to the interior of an event horizon. The edges highlighted in purple form a pair. The one on the left will cross the event horizon, and “fall into the black hole”. The one on the right will escape to affect the rest of the universe.

Later on, we will see how similar phenomena occur in the multiway causal graph, and we will discuss how this relates to quantum phenomena such as Hawking radiation. But for now, here, everything we’re discussing is purely classical. But recall that while the flux of causal edges through spacelike surfaces corresponds to energy, the flux of causal edges through timelike surfaces corresponds to momentum. On average, the net momentum associated with a pair of causal edges should always cancel out. But if one of the edges crosses inside an event horizon, then whatever momentum it carries will just be aggregated into the total momentum of what’s inside the event horizon, effectively leaving the momentum associated with the other edge uncanceled.

What does this mean? It needs a more detailed analysis. But there seems to be some reason to think that these uncanceled causal edges should lead to a net momentum flux away from the black hole—a kind of “black hole wind”. The effect will be small, because it’ll essentially be proportional to the elementary length divided by the black hole radius (or, alternatively, the black hole surface area times the elementary length divided by the black hole volume). But conceivably in some circumstances—notably with small black holes—it could have measurable consequences.

By the way, it’s worth understanding the “physical origin” of this “wind”. Essentially it’s the result of a classical analog of vacuum polarization. Whereas in ordinary general relativity spacetime is a continuum, in our models it consists of discrete components, and this discreteness causes there to be “fluctuations” that are sensitive to the presence of the event horizon.

More Complicated Cases

If one starts looking at causal graphs for our models, there are plenty of complex things one sees, even with very simple underlying rules. Here are a few examples with various forms of overall causal structure:

Labeled
&#10005

Labeled[ResourceFunction["WolframModel"][#, Automatic, 30, 
    "LayeredCausalGraph"], 
   RulePlot[ResourceFunction["WolframModel"][#]]] &[{{1, 2}, {3, 
    2}} -> {{1, 3}, {1, 2}, {4, 3}}]

Labeled
&#10005

Labeled[ResourceFunction["WolframModel"][#, Automatic, 35, 
    "LayeredCausalGraph"], 
   RulePlot[ResourceFunction["WolframModel"][#]]] &[{{1, 1}, {1, 
    2}} -> {{2, 2}, {1, 2}, {1, 2}, {1, 3}}]

Labeled
&#10005

Labeled[ResourceFunction["WolframModel"][#, Automatic, 30, 
    "LayeredCausalGraph"], 
   RulePlot[ResourceFunction["WolframModel"][#]]] &[{{1, 2}, {3, 
    2}} -> {{2, 2}, {4, 1}, {1, 3}}]

Other Exotic Phenomena in Spacetime, etc.?

Event horizons and singularities can be surprising and confusing in the Einstein equations, but the mathematical structure of the equations at least in principle allows them to be described there. But might there be other kinds of exotic phenomena in spacetime that just can’t be described using this mathematical structure? Our models definitely suggest so.

One example we already encountered is disconnection in the spatial hypergraph. Another major class of phenomena involve what amounts to dynamical change of dimension. In the timelike singularities we saw above, parts of the spatial hypergraph effectively degenerate to being zero-dimensional.

But in general, the whole or part of the spatial hypergraph can change its effective dimension. I’ve discussed elsewhere the possibility that the early universe might have had a larger effective dimension than the current universe. But what would happen if there was just a region of higher dimension in our current universe?

It’s not clear how to make a traditional continuum mathematical description of this, though presumably if one tried to describe it in terms of a manifold, it would show up as a region with infinite curvature. But given a finite—but perhaps very large—hypergraph, it’s much more straightforward to see how regions of different (approximate) dimension might exist together. Inevitably, though, there will be lots of intricate issues to unravel in seeing exactly how all the appropriate mathematical limits fit together.

Nevertheless, one can at least get some sense of what “dimension anomalies” might be like. A region of higher effective dimension will—by definition—have a denser pattern of connections than the surrounding parts of the spatial hypergraph. It’s not clear what the boundary of the structure will be like. But conceivably, to be stable, it will have to correspond to an event horizon of some sort.

One thing that’s fairly clear is that a region of higher dimension will tend to involve more causal edges than the surrounding hypergraph, and will therefore behave like a region of higher energy, so that it’ll show up as a tiny region of space in which energy (or mass) is concentrated.

But of course we’re already very familiar with one example of tiny regions of space in which energy (or mass) are concentrated: elementary particles, like electrons. I’ve always assumed that particles in our models are some kind of stable localized structures in the spatial hypergraph. Perhaps their stability has an essentially topological or graph theoretical origin. But perhaps instead it’s more connected to some kind of event-horizon-like phenomenon—that would be visible in the causal graph.

But what’s “inside” such a particle? It could be a collection of elements of the spatial hypergraph that are connected to form some higher (or effectively infinite) dimensional space. It could also simply be that at scales involving fairly few elements in the hypergraph, there are only a discrete set of possible forms for the local region of the hypergraph that support something like an event horizon.

As an example of the kinds of localization one can see in a causal graph, here are the forms of forward light cones one gets starting from different events in a particular causal graph:

With
&#10005

With[{gg = 
     Graph[ResourceFunction[
        "WolframModel"][{{1, 2}, {1, 3}} -> {{2, 4}, {4, 3}, {3, 1}}, 
       Automatic, 25, "LayeredCausalGraph"]]}, 
   HighlightGraph[
    gg, {Style[Subgraph[gg, VertexOutComponent[gg, #, 60]], Red, 
      Thick]}, ImageSize -> 150, AspectRatio -> 1/2]] & /@ 
 Range[50, 60]

It’s not clear what the best signature to use in searching for particles in our models will be. But it seems like an intriguing—and appealing—possibility that in some sense particles like electrons are “generalized black holes”, or in effect that the apparent “perfection” of black holes is also manifest in the “perfection” of the smallest distinct constituents of matter.

(This reminds me of a personal anecdote. Back around 1975, when I was about 15 years old, I attended an evening physics talk in Oxford about black holes and their quantum features. After the talk, I went up to the speaker and asked if perhaps electrons could be black holes. “Absolutely not”, he said, rather dismissively. Well, we’ll see…)

What about other kinds of “anomalies in spacetime”? In our models, the structure of space is maintained by continual activity in the spatial hypergraph. Presumably in most situations such activity will on a large scale reach a certain statistically uniform “equilibrium” state. But it is conceivable that different regions of space could show different overall levels of activity—which would lead to different “vacuum energy densities”, effectively corresponding to different values of the cosmological constant.

It is also conceivable that there could be different domains in space, all with the same overall activity level (and thus the same energy density) but with different configurations of some large-scale (perhaps effectively topological) feature. And in such a case—as in many cosmological models—one can expect things like domain walls.

In ordinary general relativity, the basic topology of space remains fixed over the course of time. In our models, it can dynamically change, with the structure of space potentially being “re-knitted” in different topological configurations. I haven’t explicitly found examples of rules that generate something like a wormhole, but I’m sure they exist.

I mentioned above the possibility of small regions of space having different effective dimensions. It’s also possible that there could be extended structures, such as tubes, with different effective dimensions. And this raises the intriguing possibility of what one might call “space tunnels” in which there is a tube of “higher-dimensional space” connecting two points in the spatial hypergraph.

No doubt there are many possibilities, and many kinds of exotic phenomena that can occur. Some may be visible directly in the large-scale structure of the spatial hypergraph, while others may be more obvious in the causal graph, or the causal connection graph. It is interesting to imagine classifying different possibilities, although it seems almost inevitable that there will ultimately be undecidable aspects to essentially any classification.

Some exotic phenomena may rely on the discrete structure of our models, and not have meaningful continuum limits. But my guess is that there will be plenty of exotic phenomena that can occur even in continuum models of spacetime, but which just haven’t been looked for before.

Cauchy Surfaces, Closed Timelike Curves, etc.

The questions of causal structure that we’re considering here are already quite complicated. But there are even more issues to consider. One of them is the question of whether it is possible to define a definite notion of “progression of time” in spacetime. The causal graph in effect specifies the partial ordering of events in a system. But now we can ask whether there is a valid foliation that respects this partial ordering, in the sense that all events in a given slice are strictly “before” those in subsequent slices. In the continuum limit, this is effectively asking whether the dynamics of our system exhibit strong hyperbolicity.

One case where this will definitely not be seen is when there are closed timelike curves, represented by loops in the causal graph. But there are also plenty of other cases where there is no strict way to make a “thickness-1” foliation in which no event occurring within a given slice has a successor in the same slice, as in:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {2, 3}} -> {{1, 2}, {2, 3}, {3, 4}}, {{1, 
   2}, {2, 3}}, 10, "LayeredCausalGraph"]

When it comes to taking a continuum limit, one should presumably “thicken” the foliations first. But there will inevitably still be cases where no limited amount of thickening will suffice to allow foliations to be created. And such cases one will presumably correspond to failures of Cauchy development in the continuum limit. And it seems likely that this phenomenon can be fairly directly connected to the singularities we have discussed above, but exactly how is not clear.

The Quantum Case

Everything I’ve said so far has involved “purely classical” evolution of the spatial hypergraph, and the causal graph that represents causal relationships within this evolution. But we can also consider multiway evolution and the multiway causal graph which in our models represent quantum behavior. So what happens to various forms of causal disconnection in this case?

The basic answer is that things rapidly become very complicated. Consider the very simple “cosmological horizon” causal graph:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {1, 3}} -> {{2, 2}, {3, 1}, {1, 
    4}}, Automatic, 10, "LayeredCausalGraph"]

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 2}, {1, 3}} -> {{2, 2}, {3, 1}, {1, 4}}]]

Here is the corresponding multiway system:

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][
 "WolframModel" -> {{{1, 2}, {1, 3}} -> {{2, 2}, {3, 1}, {1, 
      4}}}, {{{0, 0}, {0, 0}}}, 4, "StatesGraphStructure"]

And here is the multiway causal graph:

Graph
&#10005

Graph[ResourceFunction["MultiwaySystem"][
  "WolframModel" -> {{{1, 2}, {1, 3}} -> {{2, 2}, {3, 1}, {1, 
       4}}}, {{{0, 0}, {0, 0}}}, 4, "CausalGraphStructure"], 
 AspectRatio -> 1/2]

And here is its transitive reduction:

TransitiveReductionGraph
&#10005

TransitiveReductionGraph[
 Graph[ResourceFunction["MultiwaySystem"][
   "WolframModel" -> {{{1, 2}, {1, 3}} -> {{2, 2}, {3, 1}, {1, 
        4}}}, {{{0, 0}, {0, 0}}}, 4, "CausalGraphStructure"], 
  AspectRatio -> 1/2]]

This multiway causal graph includes both spacelike causal edges, of the kind shown in the ordinary causal graph, and branchlike causal edges, which represent causal relationships between different branches in the multiway graph. If one looked only at spacelike edges, one would see the spacetime event horizon. But branchlike edges can in effect connect across the event horizon.

Another way to say this is that quantum entanglements can span the event horizon. And if we look at the branchial graph associated with the multiway system above, we see that all states are entangled, even across the event horizon:

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][
 "WolframModel" -> {{{1, 2}, {1, 3}} -> {{2, 2}, {3, 1}, {1, 
      4}}}, {{{0, 0}, {0, 0}}}, 4, "BranchialGraphStructure"]

There’s lots to understand here. And it’s all quite complicated. But let’s look at a simpler case:

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 1}} -> {{1, 1}, {1, 2}}]]

The ordinary spacetime causal graph in this case is:

Graph
&#10005

Graph[ResourceFunction["WolframModel"][{{1, 1}} -> {{1, 1}, {1, 2}}, 
  Automatic, 6, "LayeredCausalGraph"], ImageSize -> {Automatic, 400}]

The underlying spatial hypergraphs are

Show
&#10005

Show[#, ImageSize -> 50] & /@ 
 ResourceFunction["WolframModel"][{{1, 1}} -> {{1, 1}, {1, 2}}, 
  Automatic, 8, "StatesPlotsList"]

and the multiway graph is just

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][
 "WolframModel" -> {{{1, 1}} -> {{1, 1}, {1, 2}}}, {{{0, 0}, {0, 
    0}}}, 5, "StatesGraphStructure"]

but the multiway causal graph is

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][
 "WolframModel" -> {{{1, 1}} -> {{1, 1}, {1, 2}}}, {{{0, 0}, {0, 
    0}}}, 7, "CausalGraphStructure"]

although its transitive reduction is just:

TransitiveReductionGraph
&#10005

TransitiveReductionGraph[
 ResourceFunction["MultiwaySystem"][
  "WolframModel" -> {{{1, 1}} -> {{1, 1}, {1, 2}}}, {{{0, 0}, {0, 
     0}}}, 7, "CausalGraphStructure"]]

As another example, consider

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 1}} -> {{1, 1}, {1, 1}}]]

whose ordinary causal graph is:

Graph
&#10005

Graph[ResourceFunction["WolframModel"][{{1, 1}} -> {{1, 1}, {1, 1}}, 
  Automatic, 6, "LayeredCausalGraph"], ImageSize -> {Automatic, 400}]

The multiway causal graph is:

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][
 "WolframModel" -> {{{1, 1}} -> {{1, 1}, {1, 1}}}, {{{0, 0}, {0, 
    0}}}, 8, "CausalGraphStructure"]

But once again the transitive reduction of this graph is just:

TransitiveReductionGraph
&#10005

TransitiveReductionGraph[
 ResourceFunction["MultiwaySystem"][
  "WolframModel" -> {{{1, 1}} -> {{1, 1}, {1, 1}}}, {{{0, 0}, {0, 
     0}}}, 8, "CausalGraphStructure"]]

As a marginally more realistic example, consider the minimal “black-hole-like” case from above:

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 2}}]]

The ordinary causal graph in this case is:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 
    2}}, Automatic, 10, "LayeredCausalGraph"]

The multiway causal graph in this case is:

Graph
&#10005

Graph[ResourceFunction["MultiwaySystem"][
  "WolframModel" -> {{{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 
       2}}}, {{{0, 0}, {0, 0}}}, 6, "CausalGraphStructure"], 
 AspectRatio -> 1/2]

The transitive reduction of this is:

TransitiveReductionGraph
&#10005

TransitiveReductionGraph[%]

Meanwhile, the branchial graph has the structure:

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][
 "WolframModel" -> {{{1, 2}, {2, 3}} -> {{4, 1}, {4, 3}, {1, 
      2}}}, {{{0, 0}, {0, 0}}}, 6, "BranchialGraphStructure"]

And once again, even though in the spacetime causal graph there’s a (rather minimal) black-hole-like event horizon, things are considerably more complicated in the multiway (i.e. quantum) case, notably with quantum entanglements in the branchial graph apparently spanning the event horizon.

There is much more to study here. But it’s already clear that there are some complicated relationships between ordinary causal connectivity, and multiway (i.e. quantum) causal connectivity. Just as in ordinary causal graphs there can be event horizons that limit the spatial effects of events, so in multiway causal graphs there can be event horizons that limit the branchial effects of events. Or, said another way, there should be “entanglement event horizons” that limit the causal relationships between quantum states.

One way to view causal effects in spacetime is to say that a given event can affect events in its future light cone. But in the space of quantum states the causal effect of an event is also limited, but now to an entanglement cone rather than a light cone. And just as we looked at causal connection graphs on the basis of light cones, we can do the same thing for entanglement cones.

The result will hopefully be an elucidation of the quantum character of event horizons. But that will have to await another bulletin…

]]> https://writings.stephenwolfram.com/2020/05/event-horizons-singularities-and-other-exotic-spacetime-phenomena/feed/ 4
<![CDATA[The Wolfram Physics Project: <br />The First Two Weeks</br>]]> https://writings.stephenwolfram.com/2020/04/the-wolfram-physics-project-the-first-two-weeks/ https://writings.stephenwolfram.com/2020/04/the-wolfram-physics-project-the-first-two-weeks/#comments Wed, 29 Apr 2020 17:59:50 +0000 Stephen Wolfram https://writings.internal.stephenwolfram.com/?p=24424 first-two-weeksProject Announcement: Finally We May Have a Path to the Fundamental Theory of Physics… and It’s Beautiful Website: Wolfram Physics Project First, Thank You! We launched the Wolfram Physics Project two weeks ago, on April 14. And, in a word, wow! People might think that interest in fundamental science has waned. But the thousands of [...]]]> first-two-weeks

First, Thank You!

We launched the Wolfram Physics Project two weeks ago, on April 14. And, in a word, wow! People might think that interest in fundamental science has waned. But the thousands of messages we’ve received tell a very different story. People really care! They’re excited. They’re enjoying understanding what we’ve figured out. They’re appreciating the elegance of it. They want to support the project. They want to get involved.

It’s tremendously encouraging—and motivating. I wanted this project to be something for the world—and something lots of people could participate in. And it’s working. Our livestreams—even very technical ones—have been exceptionally popular. We’ve had lots of physicists, mathematicians, computer scientists and others asking questions, making suggestions and offering help. We’ve had lots of students and others who tell us how eager they are to get into doing research on the project. And we’ve had lots of people who just want to tell us they appreciate what we’re doing. So, thank you!

The Wolfram Physics Project: The First Two Weeks

Real-Time Science

Science is usually done behind closed doors. But not this project. This project is an open project where we’re sharing—in as real time as we can—what we’re doing and the tools we’re using. In the last two weeks, we’ve done more than 25 hours of livestreams about the project. We’ve given introductions to the project—both lecture style and Q&A. We’ve done detailed technical sessions. And we’ve started livestreaming our actual working research sessions. And in a couple of those sessions we’ve made the beginnings of some real discoveries—live and in public.

Wolfram Physics Livestream Archives

It’s pretty cool to see thousands of people joining us to experience real-time science. (Our peak so far was nearly 8000 simultaneous viewers, and a fairly technical 2-hour session ended up being watched for a total of more than three-quarters of a million minutes.) And we’re starting to see serious “public collaboration” happening, in real time. People are making technical suggestions, sending us links to relevant papers, even sending us pieces of Wolfram Language code to run—all in real time.

One of the great—and unexpected—things about the project is how well what we’ve discovered seems to dovetail with existing initiatives (like string theory, holographic principles, spin networks, higher categories, twistor theory, etc.) We’re keen to understand more about this, so one of the things we’ll be doing is having livestreamed discussions with experts in these various areas.

The Summer School Approaches

It’s only been two weeks since our project was launched—and there’ve already been some interesting things written about it that have helped sharpen my philosophical understanding. There hasn’t yet been time for serious scientific work to have been completed around the project… but we know people are on this path.

We also know that there are lots of people who want to get to the point where they can make serious contributions to the project. And to help with that, we’ve got an educational program coming up: we’ve added a Fundamental Physics track to our annual Wolfram Summer School.

Wolfram Summer School

Our Summer School—which has been running since 2003—is a 3-week program, focused on every participant doing a unique, original project. For the Fundamental Physics track, we’re going to have a “week 0” (June 22–27) that will be lectures and workshops about the Physics Project, followed by a 3-week project-based program (June 28–July 17).

This year’s Summer School will (for the first time) be online (though synchronous), so it’s going to be easier for students from around the world to attend. Many of the students for the Fundamental Physics track will be graduate students or postdocs, but we also expect to have students who are more junior, as well as professors and professionals. Since announcing the program last week, we’ve already received many good applications… but we’re going to try to expand the program to accommodate everyone who makes sense. (So if you’re thinking of applying, please just apply… though do it as soon as you can!)

I’m very excited about what’s going to be achieved at the Summer School. I never expected our whole project to develop as well—or as quickly—as it has. But at this point I think we’ve developed an approach and a methodology that are going to make possible rapid progress in many directions. And I’m fully expecting that there’ll be projects at the Summer School that lead, for example, to academic papers that rapidly become classics.

This is one of those rare times when there’s a lot of exceptionally juicy low-hanging fruit—and I’m looking forward to helping outstanding students find and pick that scientific fruit at our Summer School.

New Science in the First Two Weeks

It’s not too surprising that much of our time in the first two weeks after launching the project has been spent on “interfacing with the world”—explaining what we’re doing, trying to respond to thousands of messages, and setting up internal and external systems that can make future interactions easier.

But we’ve been very keen to go on working on the science, and some of that has been happening too. We’ve so far done five livestreamed working sessions, three on spin and charge, one on the interplay with distributed computing, and one on combinators and physics. Of course, this is just what we’re directly working on ourselves. We’ve also already helped several people get started on projects that use their expertise—in physics, mathematics or computer science—and it’s wonderful to see the beginning of this kind of “scaling up”.

But let me talk a bit about things I think I’ve learned in the past two weeks. Some of this comes from the working sessions we’ve had; some is in response to questions at our Q&As and some is just the result of my slowly growing understanding—particularly helped by my efforts in explaining the project to people.

What Is Angular Momentum?

OK, so here’s something concrete that came out of our working session last Thursday: I think we understand what angular momentum is. Here’s part of where we figured that out:

Physics working session

We already figured out a few months ago what linear momentum is. If you want to know the amount of linear momentum in a particular direction at a particular place in the hypergraph, you just have to see how much “activity” at that place in the hypergraph is being transferred in that “direction”.

Directions are defined by geodesics that give the shortest path between one point and another. Momentum in a particular direction then corresponds to the extent to which an update at one point leads to updates at nearby points along that direction. (More formally, the statement is that momentum is given by the flux of causal edges through timelike hypersurfaces.)

OK, so how about angular momentum? Well, it took us a total of nearly 6 hours, over three sessions, but here’s what we figured out. (And kudos to Jonathan Gorard for having had a crucial idea.)

So, first, what’s the usual concept of angular momentum in physics? It’s all about turning. It’s all about momentum that doesn’t add up to go in any particular direction but just circulates around. Here’s the picture we used on the livestream:

VectorPlot
&#10005

VectorPlot[{y, -x}, {x, -3, 3}, {y, -3, 3}]

Imagine this is a fluid, like water. The fluid isn’t flowing in a particular direction. Instead, it’s just circulating around, creating a vortex. And this vortex has angular momentum.

But what might the analog of this be in a hypergraph? To figure this out, we have to understand what rotation really is. It took us a little while to untangle this, but in the end it’s very simple. In any number of dimensions, a rotation is something that takes two vectors rooted at a particular point, and transforms one into the other. On the livestream, we used the simple example:

Graphics3D
&#10005

Graphics3D[{Thick, InfinitePlane[{{0, 0, 0}, {1, 0, 0}, {0, 1, 2}}], 
  Arrow[{{0, 0, 0}, {1, 0, 0}}], Arrow[{{0, 0, 0}, {0, 1, 2}}]}]

And in the act of transforming one of these vectors into the other we’re essentially sweeping out a plane. We imagined filling in the plane by making something like a string figure that joins points on the two vectors:

Graphics3D
&#10005

Graphics3D[Table[Line[{{i, 0, 0}, {0, j, 0}}], {i, 10}, {j, 10}]]

But now there’s an easy generalization to the hypergraph. A single geodesic defines a direction. Two geodesics—and the geodesics “strung” between them—define a plane. Here’s what we created to give an illustration of this:

Generalization to the hypergraph

So now we are beginning to have a picture of angular momentum: it is “activity” that “circulates around” in this little “patch of plane” defined by two geodesics from a particular point. We can get considerably more formal than this, talking about flux of causal edges in slices of tubes defined by pairs of geodesics. On the livestream, we started relating this to the tensor Jμν which defines relativistic angular momentum (the two indices of Jμν basically correspond to our two geodesics).

There are details to clean up, and further to go. (Rotating frames in general relativity? Rotating black holes? Black-hole “no hair” theorems? Etc.) But this was our first real “aha” moment in a public working session. And of course there’s an open archive both of the livestream itself, and the notebook created in it.

What about Quantum Angular Momentum and Spin?

One of the reasons I wanted to think about angular momentum was because of quantum mechanics. Unlike ordinary momentum, angular momentum is quantized, even in traditional physics. And, more than that, even supposedly point particles—like electrons—have nonzero quantized spin angular momentum.

We don’t yet know how this works in our models. (Stay tuned for future livestreamed working sessions!) But one point is clear: it has to involve not just the spatial hypergraph and the spacetime causal graph (as in our discussion of angular momentum above), but also the multiway causal graph.

And that means we’re dealing not just with a single rotation, but a whole collection of interwoven ones. I have a suspicion that the quantization is going to come from something essentially topological. If you’re looking at, say, fluid flow near a vortex, then when you go around a small circle adding up the flow at every point, you’ll get zero if the circle doesn’t include the center of the vortex, and some quantized value if it does (the value will be directly proportional to the number of times you wind around the vortex).

Assuming we’ve got a causal-invariant system, one feature of the multiway causal graph is that it must consist of many copies of the same spacetime causal graph—in a sense laid out (albeit with complicated interweaving) in branchial space. And it’s also possible (as Jonathan suggested on the livestream) that somehow when one measures an angular momentum—or a spin—one is effectively picking up just a certain discrete number of “histories”, or a discrete number of identical copies of the spacetime causal graph.

But we’ll see. I won’t be surprised if both ideas somehow dovetail together. But maybe we’ll need some completely different idea. Either way, I suspect there’s going to be somewhat sophisticated math involved. We have a guess that the continuum limit of the multiway causal graph is something like a twistor space. So then we might be dealing with homotopy in twistor space—or, more likely, some generalization of that.

On the livestream, various people asked about spinors. We ordinarily think of a rotation through 360° as bringing everything back to where it started from. But in quantum mechanics that’s not how things work. Instead, for something like an electron, it takes a rotation through 720°. And mathematically, that means we’re dealing with so-called spinors, rather than vectors. We don’t yet know how this could come out in our models (though we have some possible ideas)—but this is something we’re planning to explore soon. (It’s again mathematically complicated, because we’re not intrinsically dealing with integer-dimensional space, so we’ve got to generalize the notion of rotation, rotation groups, etc.)

And as I write this, I have a new idea—of trying to see how relativistic wave equations (like the Klein–Gordon equation for spin-0 particles or the Dirac equation for spin-1/2 particles) might arise from thinking about bundles of geodesics in the multiway causal graph. The suspicion is that there would be a subtle relationship between effective spacetime dimension and symmetries associated with the bundle of geodesics, mirroring the way that in traditional relativistic quantum mechanics one can identify different spins with objects transforming according to different irreducible representations of the symmetry group of spacetime.

CPT Invariance?

Related to the whole story about spinors, there’s a fundamental result in quantum field theory called the spin-statistics theorem that says that particles with half-integer spins (like electrons) are fermions (and so obey the exclusion principle), while particles with integer spins (like photons) are bosons (and so can form condensates). And this in turn is related to what’s called CPT invariance.

And one of the things that came out of a livestream last week is that there’s potentially a very beautiful interpretation of CPT invariance in our models.

What is CPT invariance? C, P and T correspond to three potential transformations applied to physical systems. T is time reversal, i.e. having time run in reverse. P is parity, or space inversion: reversing the sign of all spatial coordinates. And C is charge conjugation: turning particles (like electrons) into antiparticles (like positrons). One might think that the laws of physics would be invariant under any of these transformations. But in fact, each of C, P and T invariance is violated somewhere in particle physics (and this fact was a favorite of mine back when I did particle physics for a living). However, the standard formalism of quantum field theory implies that there is still invariance under the combined CPT transformation—and, so far as one can tell, this is experimentally correct.

OK, so what do C, P and T correspond to in our models? Consider the multiway causal graph. Here’s a toy version of it, that we discussed in a livestream last week:

Graph3D
&#10005

Graph3D[GridGraph[{6, 6, 6}]]

Edges in one direction (say, down) correspond to time. Edges in another direction correspond to space. And edges in the third direction correspond to branchial space (i.e. the space of quantum spaces).

T and P then have simple interpretations: they correspond to reversing time edges and space edges, respectively. C is a little less clear, but we suspect that it just corresponds to reversing branchial edges (and this very correspondence probably tells us something about the nature of antiparticles).

So then CPT is like a wholesale inversion of the multiway causal graph. But what can we say about this? Well, we’ve argued that (with certain assumptions) spacetime slices of the multiway causal graph must obey the Einstein equations. Similarly, we’ve argued that branchtime slices follow the Feynman path integral. But now there’s a generalization of both these things: in effect, a generalization of the Einstein equations that applies to the whole multiway causal graph. It’s mathematically complicated—because it must describe the combined geometry of physical and branchial space. But it looks as if CPT invariance must just correspond to a symmetry of this generalized equation. And to me this is something very beautiful—that I can hardly wait to investigate more.

What’s Going On in Quantum Computing?

One feature of our models is that they potentially make it a lot more concrete what’s going on in quantum computing. And over the past couple of weeks we’ve started to think about what this really means.

There are two basic points. First, the multiway graph provides a very explicit representation of “quantum indeterminacy”. And, second, thinking about branchial space (and quantum observation frames) gives more concreteness to the notion of quantum measurement.

A classical computer like an ordinary Turing machine is effectively just following one deterministic path of evolution. But the qualitative picture of a quantum computer is that instead it’s simultaneously following many paths of evolution, so that in effect it can do many Turing-machine-like computations in parallel.

But at the end, there’s always the issue of finding which path or paths have the answer you want: and in effect you have to arrange your measurement to just pick out these paths.

In ordinary Turing machines, there are problems (like multiplying numbers) that are in the class P, meaning that they can be done a number of steps polynomial in the size of the problem (say, the number of digits in the numbers). There are also problems (like factoring numbers) that are in the class NP, meaning that if you were to “non-deterministically” guess the answer, you could check it in polynomial time.

A core question in theoretical computing science (which I have views on, but won’t discuss here) is whether P=NP, that is, whether all NP problems can actually be done in polynomial time.

One way to imagine doing an NP problem in polynomial time is not to use an ordinary Turing machine, but instead to use a “non-deterministic Turing machine” in which there is a tree of possible paths where one can pick any path to follow. Well, our multiway system representing quantum mechanics essentially gives that whole tree (though causal invariance implies that ultimately the branches always merge).

For the last several years, we’ve been developing a framework for quantum computing in the Wolfram Language (which we’re hoping to release soon). And in this framework we’re essentially describing two things: how quantum information is propagated with time through some series of quantum operations, and how the results of quantum processes are measured. More formally, we have time evolution operators, and we have measurement operators.

Well, here’s the first neat thing we’ve realized: we can immediately reformulate our quantum computing framework directly in terms of multiway systems. The quantum computing framework can in effect just be viewed as an application of our MultiwaySystem function that we put in the Wolfram Function Repository for the Physics Project.

But now that we’re thinking in terms of multiway systems—or the multiway causal graph—we realize that standard quantum operations are effectively associated with timelike causal edges, while measurement operations are associated with branchlike causal edges. And the extent to which one can get answers before decoherence takes over has to do with a competition between these kinds of edges.

This is all very much in progress right now, but in the next few weeks we’re expecting to be able to look at well-known quantum algorithms in this context, and see whether we can analyze them in a way that treats time evolution and measurement on a common footing. (I will say that ever since the work I did with Richard Feynman on quantum computing back in the early 1980s, I have always wanted to really understand the “cost of measurement”, and I’m hoping that we’ll finally be able to do that now.)

Numerical Relativity; Numerical Quantum Field Theory

Although the traditional view in physics is that space and time are continuous, when it comes to doing actual computer simulations they usually in the end have to be discretized. And in general relativity (say for simulating a black hole merger) it’s usually a very subtle business, in which the details of the discretization are hard to keep track of, and hard to keep consistent.

In our models, of course, discretization is not something “imposed after the fact”, but rather something completely intrinsic to the model. So we started wondering whether somehow this could be used in practice to set up simulations.

It’s actually a very analogous idea to something I did rather successfully in the mid-1980s for fluid flow. In fluids, as in general relativity, there’s a traditional continuum description, and the most obvious way of doing simulations is by discretizing this. But what I did instead was to start with an idealized model of discrete molecules—and then to simulate lots of these molecules. My interest was to understand the fundamental origins of things like randomness in fluid turbulence, but variants of the method I invented have now become a standard approach to fluid simulation.

So can one do something similar with general relativity? The actual “hypergraph of the universe” would be on much too tiny a scale for it to be directly useful for simulations. But the point is that even on a much larger scale our models can still approximate general relativity—but unlike “imposed after the fact” discretization, they are guaranteed to have a certain internal consistency.

In usual approaches to “numerical relativity” one of the most difficult things is dealing with progressive “time evolution”, not least because of arbitrariness in what coordinates one should use for “space” and “time”. But in our models there’s a way of avoiding this and directly getting a discrete structure that can be used for simulation: just look at the spacetime causal graph.

There are lots of details, but—just like in the fluid flow case—I expect many of them won’t matter. For example, just like lots of rules for discrete molecules yield the same limiting thermodynamic behavior, I expect lots of rules for the updating events that give the causal graph will yield the same limiting spacetime structure. (Like in standard numerical analysis, though, different rules may have different efficiency and show different pathologies.)

It so happens that Jonathan Gorard’s “day job” has centered around numerical relativity, so he was particularly keen to give this a try. But even though we thought we had just started talking about the idea in the last couple of weeks, Jonathan noticed that actually it was already there on page 1053 of A New Kind of Science—and had been languishing for nearly 20 years!

Still, we immediately started thinking about going further. Beyond general relativity, what about quantum field theory? Things like lattice gauge theory typically involve replacing path integrals by “thermal averages”—or effectively operating in Euclidean rather than Minkowski spacetime. But in our models, we potentially get the actual path integral as a limit of the behavior of geodesics in a multiway graph. Usually it’s been difficult to get a consistent “after the fact” discretization of the path integral; but now it’s something that emerges from our models.

We haven’t tried it yet (and someone should!). But independent of nailing down precisely what’s ultimately underneath quantum field theory it seems like the very structure of our models has a good chance of being very helpful just in dealing in practice with quantum field theory as we already know it.

Surprise: It’s Not Just about Physics

One of the big surprises of the past two weeks has been our increasing realization that the formalism and framework we’re developing really aren’t just relevant to physics; they’re potentially very important elsewhere too.

In a sense this shouldn’t be too surprising. After all, our models were constructed to be as minimal and structureless as possible. They don’t have anything intrinsically about physics in them. So there’s no reason they can’t apply to other things too.

But there’s a critical point here: if a model is simple enough, one can expect that it could somehow be a foundation for many different kinds of things. Long ago I found that with the 1D cellular automata I studied. The 256 “elementary” cellular automata are in a sense the very simplest models of a completely discrete system with a definite arrangement of neighbors. And over the years essentially all of these 256 cellular automata found uses as models for bizarrely different things (pigmentation, catalysis, traffic, vision, etc.).

Well, our models now are in a sense the most minimal that describe systems with rules based on arbitrary relationships (as represented by collections of relations).

And the first big place where it seems the models can be applied is in distributed computing. What is distributed computing? Essentially it’s about having a whole collection of computing elements that are communicating with others to collectively perform a computation.

In the simplest setup, one just assumes that all the computing elements are operating in lockstep—like in a cellular automaton. But what if the computing elements are instead operating asynchronously, sending data to each other when it happens to be ready?

Well, this setup immediately seems a lot more like the situation we have in our models—or in physics—where different updates can happen in any order, subject only to following the causal relationships defined by the causal graph.

But now there start to be interesting analogies between the distributed computing case and physics. And indeed what’s got me excited is that I think there’s going to be a very fruitful interplay between these areas. Ideas in distributed computing are going to be useful for thinking about physics—and vice versa.

I’m guessing that phenomena and results in distributed computing are going to have direct analogs in general relativity and in quantum mechanics. (“A livelock is like a closed timelike curve”, etc.) And that ideas from physics in the context of our models are going to give one new ways to think about distributed computing. (Imagine “programming in a particular reference frame”, etc.)

In applying our models to physics, a central idea is causal invariance. And this has an immediate analog in distributed computing: it’s the idea of eventual consistency, or in other words that it doesn’t matter what order operations are done in; the final result is always the same.

But here’s something from physics: our universe (fortunately!) doesn’t seem like it’s going to halt with a definite “final result”. Instead, it’s just continually evolving, but with causal invariance implying various kinds of local equivalence and consistency. And indeed many modern distributed computing systems are again “just running” without getting to “final results” (think: the internet, or a blockchain).

Well, in our approach to physics the way we handle this is to think in terms of foliations and reference frames—which provide a way to organize and understand what’s going on. And I think it’s going to be possible to think about distributed computing in the same kind of way. We need some kind of “calculus of reference frames” in terms of which we can define good distributed computing primitives.

In physics, reference frames are most familiar in relativity. The most straightforward are inertial frames. But in general relativity there’s been slow but progressive understanding of other kinds of frames. And in our models we’re also led to think about “quantum observation frames”, which are essentially reference frames in the branchial space of quantum states.

Realistically, at least for me, it’s so far quite difficult to wrap one’s head around these various kinds of reference frames. But I think in many ways this is at its root a language design problem. Because if we had a good way to talk about working with reference frames we’d be able to use them in distributed computing and so we’d get familiar with them. And then we’d be able to import our understanding to physics.

One of the most notable features of our models for physics when it comes to distributed computing is the notion of multiway evolution. Usually in distributed computing one’s interested in looking at a few paths, and making sure that, for example, nothing bad can happen as a result of different orders of execution. But in multiway systems we’re not just looking at a few paths; we’re looking at all paths.

And in our models this isn’t just some kind of theoretical concept; it’s the whole basis for quantum mechanics. And given that we’re looking at all paths, we’re led to invent things like quantum observation frames, and branchial space. We can think of the branching of paths in the multiway system as corresponding to elementary pieces of ambiguity. And in a sense the handling of our model—and the features of physics that emerge—is about having ways to deal with “ambiguity in bulk”.

Is there an analog of the Feynman path integral in distributed computing? I expect so—and I wouldn’t be surprised if it’s very useful in giving us a way to organize our thinking and our programs.

In theoretical analyses of distributed computing, one usually ignores physical space—and the speed of light. But with our models, it’s going to be possible to account for such things, alongside branchial connections, which are more like “instantaneous network connections”. And, for example, there’ll be analogs of time dilation associated with motion in both physical space and branchial space. (Maybe such effects are already known in distributed computing; I’m not sure.)

I think the correspondence between distributed computing and physics in the context of our models is going to be incredibly fertile. We already did one livestreamed working session about it (with Taliesin Beynon as a guest); we’ll be doing more.

Distributed computing

In the working session we had, we started off discussing vector clocks in distributed computing, and realized that they’re the analog of geodesic normal coordinates in physics. Then we went on to discuss more of the translation dictionary between distributed computing and physics. We realized that race conditions correspond to branch pairs. The branchial graph defines sibling tasks. Reads and writes are just incoming and outgoing causal edges. We invented the idea of a “causal exclusion graph”, which is a kind of complement of a causal graph, saying not what events can follow a given event, but rather what events can’t follow a given event.

We started discussing applications. Like clustered databases, multiplayer games and trading in markets. We talked about things like Git, where merge conflicts are like violations of causal invariances. We talked a bit about blockchains—but it seemed like there were richer analogs in hashgraphs and things like NKN and IOTA. Consensus somehow seemed to be the analog of “classicality”, but then there’s the question of how much can be achieved in the “quantum regime”.

Although for me the notion of seriously using ideas from physics to think about distributed computing is basically less than two weeks old, I’ve personally been wondering about how to do programming for distributed computing for a very long time. Back in the mid-1980s, for example, when I was helping a company (Thinking Machines Corporation) that was building a 65536-processor computer (the Connection Machine), I thought the most plausible way to do programming on such a system would be through none other than graph rewriting.

But at the time I just couldn’t figure out how to organize such programming so that programmers could understand what was going on. But now—through thinking about physics—I’m pretty sure there’s going to be a way. We’re already used to the idea (at least in the Wolfram Language) that we can write a program functionally, procedurally, declaratively, etc. I think there are going to be ways to write distributed programs “in different reference frames”. It’s probably going to be more structured and more parametrized than these different traditional styles of programming. But basically it’ll be a framework for looking at a given program in different ways, and using different foliations to understand and describe what it’s supposed to do.

I have to mention one more issue that’s been bugging me since 1979. It has to do with recursive evaluation. Imagine we’ve defined a Fibonacci recursion:

f[n_] := f[n - 1] + f[n - 2]
&#10005

f[n_] := f[n - 1] + f[n - 2]

f[1] = f[2] = 1
&#10005

f[1] = f[2] = 1

Now imagine you enter f[10]. How should you evaluate this? At the first step you get f[9]+f[8]. But after that, do you just keep “drilling down” the evaluation of f[9] in a “depth-first way”, until it gets to 1s, or do you for example notice that you get f[8]+f[7]+f[8], and then collect the f[8]s and evaluate them only once?

In my Mathematica-precursor system SMP, I tried to parametrize this behavior, but realistically nobody understood it. So my question now is: given the idea of reference frames, can we invent some kind of notion of “evaluation fronts” that can be described like foliations, and that define the order of recursive evaluation?

An extreme case of this arises in evaluating S, K combinators. Even though S, K combinators are 100 years old this year, they remain extremely hard to systematically wrap one’s head around. And part of the reason has to do with evaluation orders. It’s fine when one manages to get a combinator expression that can successfully be evaluated (through some path) to a fixed point. But what about one that just keeps “evolving” as you try to evaluate it? There doesn’t seem to be any good formalism for handling that. But I think our physics-based approach may finally deliver this.

So, OK, the models that we invented for physics also seem highly relevant for distributed computing. But what about for other things? Already we’ve thought about two other—completely different—potential applications.

The first, that we actually discussed a bit even the week before the Physics Project was launched, has to do with digital contact tracing in the context of the current pandemic. The basic idea—that we discussed in a livestreamed brainstorming session—is that as people move around with their cellphones, Bluetooth or other transactions can say when two phones are nearby. But the graph of what phones were close to what phones can be thought of as being like a causal graph. And now the question of whether different people might have been close enough in space and time for contagion becomes one of reconstructing spatial graphs by making plausible foliations of the causal graph. There are bigger practical problems to solve in digital contact tracing, but assuming these are solved, the issues that can be informed by our models are likely to become important. (By the way, given a network of contacts, the spreading of a contagious disease on it can be thought of as directly analogous to the growth of a geodesic ball in it.)

One last thing that’s still just a vague idea is to apply our models to develop a more abstract approach to biological evolution and natural selection (both for the overall tree of life, and for microorganisms and tumors). Why might there be a connection? The details aren’t yet clear. Perhaps something like the multiway graph (or rule-space multiway graph) can be used to represent the set of all possible sequences of genetic variations. Maybe there’s some way of thinking about the genotype-phenotype correspondence in terms of the correspondence between multiway graphs and causal graphs. Maybe different sequences of “environments” correspond to different foliations, sampling different parts of the possible sequence of genetic variations. Maybe speciation has some correspondence with event horizons. Most likely there’ll need to be some other layer or variation on the models to make them work. But I have a feeling that something is going to be possible.

It’s been possible for a long time to make “aggregated” models of biological evolution, where one’s looking at total numbers of organisms of some particular type (with essentially the direct analog of differential-equation-based aggregated epidemiological models). But at a more individual-organism level one’s typically been reduced to doing simulations, which tend to have messy issues like just how many “almost fittest” organisms should be kept at every “step” of natural selection. It could be that the whole problem is mired in computational irreducibility. But the robust way in which one seems to be able to reason in terms of natural selection suggests to me that—like in physics—there’s some layer of computational reducibility, and one just has to find the right concepts to be able to develop a more general theory on the basis of it. And maybe the models we’ve invented for physics give us the framework to do this.

Some Coming Attractions

We’re at a very exciting point—where there are an incredible amount of “obvious directions” to go. But here are a few that we’re planning on exploring in the next few days, in our livestreamed working sessions.

The Fine Structure of Black Holes

In traditional continuum general relativity it always seems a bit shocking when there’s some kind of discontinuity in the structure of spacetime. In our fundamentally discrete model it’s a bit less shocking, and in fact things like black holes (and other kinds of spacetime singularities) seem to arise very naturally in our models.

But what exactly are black holes like in our models? Do they have the same kind of “no hair” perfection as in general relativity—where only global properties like mass and angular momentum affect how they ultimately look from outside? And how do our black holes generate things like Hawking radiation?

In a livestream last week, we generated a very toy version of a black hole, with a causal graph of the form:

ResourceFunction["MultiwaySystem"]
&#10005

ResourceFunction["MultiwaySystem"][{"A" -> "AB", "XABABX" -> "XXXX", \
"XXXX" -> "XXXXX"}, {"XAAX"}, 8, "CausalGraphStructure"] // \
LayeredGraphPlot

This “black hole” has the feature that causal edges go into it, but none come out. In other words, things can affect the black hole, but the black hole can’t causally affect anything else. It’s the right basic idea, but there’s a lot missing from the toy version, which isn’t surprising, not least because it’s based on a simple string substitution system, and not even a hypergraph.

What we now need to do is to find more realistic examples. Then what we’re expecting is that it’ll actually be fairly obvious that the black hole only has certain properties. The mass will presumably relate to the number of causal edges that go into the black hole. And now that we have an idea what angular momentum is, we should be able to identify how much of that is going in as well. And maybe we’ll be able to see that there’s a limit on the amount of angular momentum a black hole of a given mass can have (as there seems to be in general relativity).

Some features of black holes we should be able to see by looking at ordinary spacetime causal graphs. But to understand Hawking radiation we’re undoubtedly also going to have to look at multiway causal graphs. And we’re hoping that we’ll actually be able to explicitly see the presence of both the causal event horizon and the entanglement event horizon—so that we’ll be able to trace the fate of quantum information in the “life cycle” of the black hole.

All the Spookiness of Quantum Mechanics

Quantum mechanics is notorious for yielding strange phenomena that can be computed within its formalism, but which seem essentially impossible to account for in any other way. Our models, however, finally provide a definite suggestion for what is “underneath” quantum mechanics—and from our models we’ve already been able to derive many of the most prominent phenomena in quantum mechanics.

But there are plenty more phenomena to consider, and we’re planning to look at this in working sessions starting later this week. One notable phenomenon that we’ll be looking at is the violation of Bell’s inequality—which is often said to “prove” that no “deterministic” theory can reproduce the predictions of quantum mechanics. Of course, our theory isn’t “deterministic” in the usual sense. Yes, the whole multiway graph is entirely determined by the underlying rule. But what we observe depends on measurements that sample collections of branches determined by the quantum observation frames we choose.

But we’d still like to see explicitly how Bell’s inequality is violated—and in fact we suspect that in our multiway graph formalism it’ll be much more straightforward to see how this and its various generalizations work. But we’ll see.

In Q&A sessions that we’ve done, and messages that we’ve received, there’ve been many requests to reproduce a classic quantum result: interference in the double-slit experiment. A few months ago, I would have been very pessimistic about being able to do this. I would have thought that first we’d have to understand exactly what particles are, and then we’d only slowly be able to build up something we could consider a realistic “double slit”.

But one of the many surprises has been that quantum phenomena seem much more robust than I expected—and it seems possible to reproduce their essential features without putting all the details in. So maybe we’ll be able, for example, just to look at a multiway system generated by a string substitution system, and already be able to see something like interference fringes in an idealized double-slit experiment. We’ll see.

When we’re talking about quantum mechanics, many important practical phenomena arise from looking at bound states where for example some particle is restricted to a limited region (like an electron in a hydrogen atom), and we’re interested in various time-repeating eigenstates. My first instinct—as in the case of the double-slit experiment—was to think that studying bound states in our models would be very complicated. After all, at some level, bound states are a limiting idealization, and even in quantum field theory (or with quantum mechanics formulated in terms of path integrals) they’re already a complicated concept.

But actually, it seems as if it may be possible to capture the essence of what’s going on in bound states with even very simple toy examples in our models—in which for instance there are just cycles in the multiway graph. But we need to see just how this works, and how far we can get, say in reproducing the features of the harmonic oscillator in quantum mechanics.

In traditional treatments of quantum mechanics, the harmonic oscillator is the kind of thing one starts with. But in our models its properties have to be emergent, and it’ll be interesting to see just how “close to the foundations” or how generic their derivation will be able to be.

People Do Care about Thermodynamics

Understanding the Second Law of thermodynamics was one of the things that first got me interested in fundamental physics, nearly 50 years ago. And I was very pleased that by the 1990s I thought I finally understood how the Second Law works: basically it’s a consequence of computational irreducibility, and the fact that even if the underlying rules for a system are reversible, they can still so “encrypt” information about the initial conditions that no computationally limited observer can expect to recover it.

This phenomenon is ultimately crucial to the derivation of continuum behavior in our models—both for spacetime and for quantum mechanics. (It’s also critical to my old derivation of fluid behavior from idealized discrete underlying molecules.)

The Second Law was big news at the end of the 1800s and into the early 1900s. But I have to say that I thought people had (unfortunately) by now rather lost interest in it, and it had just become one of those things that everyone implicitly assumes is true, even though if pressed they’re not quite sure why. So in the last couple of weeks I’ve been surprised to see so many people asking us whether we’ve managed to understand the Second Law.

Well, the answer is “Yes!”. And in a sense the understanding is at an even more fundamental level than our models: it’s generic to the whole idea of computational models that follow the Principle of Computational Equivalence and exhibit computational irreducibility. Or, put another way, once everything is considered to be computational, including both systems and observers, the Second Law is basically inevitable.

But just where are its limits, and what are the precise mathematical conditions for its validity? And how, for example, does it relate in detail to gravity? (Presumably the reference frames that can be set up are limited by the computational capabilities of observers, which must be compared to the computations being done in the actual evolution of spacetime.) These are things I’ve long wanted to clarify, and I’m hoping we’ll look at these things soon.

What about Peer Review and All That?

There’s a lot in our Physics Project. New ideas. New methods. New conclusions. And it’s not easy to deliver such a thing to the world. We’ve worked hard the last few months to write the best expositions we can, and to make software tools that let anyone reproduce—and extend—everything we’ve done. But the fact remains that to seriously absorb what we just put into the world is going to take significant effort.

It isn’t the way science usually works. Most of the time, progress is slow, with new results trickling out, and consensus about them gradually forming. And in fact—until a few months ago—that’s exactly how I expected things would go with our Physics Project. But—as I explained in my announcement—that’s not how it worked out. Because, to my great surprise, once we started seriously working on the ideas I originally hatched 30 years ago we suddenly discovered that we could make dramatic progress.

And even though we were keen to open the project up, even the things we discovered—together with their background ideas and methods—are a lot to explain, and, for example, fill well over 800 pages.

But how does that fit into the normal, academic way of doing science? It’s not a great fit. When we launched the project two weeks ago, I sent mail to a number of people. A historian of science I’ve known for a long time responded:

Please remember as you go forward that, many protestations to the contrary, most scientists hate originality, which feels strange, uncomfortable, and baffling. They like novelty well within the boundaries of what they’re doing and the approach that they’re taking, but originality is harder for them to grasp. Therefore expect opposition based on incomprehension rather than reasoned disagreement. Hold fast.

My knowledge of history, and my own past experiences, tell me that there’s a lot of truth to this. Although I’m happy to say that in the case of our project it seems like there are actually a very good number of scientists who are enthusiastically making the effort to understand what we’ve done.

Of course, there are people who think “This isn’t the way science usually works; something must be wrong”. And the biggest focus seems to be around “What about peer review?”. Well, that’s an interesting question.

What’s ultimately the point of peer review? Basically it’s that people want external certification that something is correct—before they go to the effort of understanding it themselves, or start building on it. And that’s a reasonable thing to want. But how should it actually work?

When I used to publish academic papers in the 1970s and early 1980s I quickly discovered something disappointing about actual peer review—that closely mirrors what my historian-of-science friend said. If a paper of mine was novel though not particularly original, it sailed right through peer review. But if it was actually original (and those are the papers that have had the most impact in the end) it essentially always ran into trouble with peer review.

I think there’s also always been skullduggery with anonymous peer review—often beyond my simplified “natural selection” model: “If paper cites reviewer, accept; otherwise reject”. But particularly for people outside of science, it’s convenient to at least imagine that there’s some perfect standard of academic validity out there.

I haven’t published an ordinary academic paper since 1986, but I was rather excited two weeks ago to upload my first-ever paper to arXiv. I was surprised it took about a week to get posted, and I was thinking it might have run into some filter that blocks any paper about a fundamental theory of physics—on the “Bayesian” grounds that there’s never been a meaningful paper with such a claim during the time arXiv has been operating. But my friend Paul Ginsparg (founder of arXiv) tells me there’s nothing like that in place; it’s just a question of deciding on categories and handling hundreds of megabytes of data.

OK, but is there a good way to achieve the objectives of peer review for our project? I was hoping I could submit my paper to some academic journal and then leave it to the journal to just “run the peer-review process”. But on its own, it doesn’t seem like it could work. And in particular, it’s hard to imagine that in the normal course of peer reviewing there could be serious traditional peer review on a 450-page document like this that would get done in less than several years.

So over the past week we’ve been thinking about additional, faster things we can do (and, yes, we’ve also been talking to people to get “peer reviews” of possible peer-review processes, and even going to another meta level). Here’s what we’ve come up with. It’s based on the increasingly popular concept of “post-publication peer review”. The idea is to have an open process, where people comment on our papers, and all relevant comments and comments-on-comments, etc. are openly available on the web. We’re trying—albeit imperfectly—to get the best aspects of peer review, and to do it as quickly as possible.

Among other things, what we’re hoping is that people will say what they can “certify” and what they cannot: “I understand this, but don’t have anything to say about that”. We’re fully expecting people will sometimes say “I don’t understand this” or “I don’t think that is correct”. Then it’s up to us to answer, and hopefully before long consensus will be reached. No doubt people will point out errors and limitations (including “you should also refer to so-and-so”)—and we look forward to using this input to make everything as good as possible. (Thanks, by the way, to those who’ve already pointed out typos and other mistakes; much appreciated, and hopefully now all fixed.)

One challenge about open post-publication peer review is who will review the reviewers. Here’s what we’ve set up. First, every reviewer gives information about themselves, and we validate that the person posting is who they say they are. Then we ask the reviewer to fill out certain computable facts about themselves. (Academic affiliation? PhD in physics? Something else? Professor? Published on arXiv? ISI highly cited author? Etc.) Then when people look at the reviews, they can filter by these computable facts, essentially deciding for themselves how they want to “review the reviewers”.

I’m optimistic that this will work well, and will perhaps provide a model for review processes for other things. And as I write this, I can’t help noticing that it’s rather closely related to work we’ve done on validating facts for computable contracts, as well as to the ideas that came up in my testimony last summer for the US Senate about “ranking providers” for automated content selection on the internet.

Submit a Peer Review

Other Things

The Project’s Twitter

There’s a lot going on with the Wolfram Physics Project, and we’re expecting even much more, particularly as an increasing number of other people get involved. I’m hoping I’ll be able to write “progress reports” like this one from time to time, but we’re planning on consistently using the new Twitter feed for the project to give specific, timely updates:

@wolframphysics

Please follow us! And send us updates about what you’re doing in connection with the Wolfram Physics Project, so we can post about it.

Wolfram Physics on Twitter

Can We Explain the Project to Kids?

The way I know I really understand something is when I can explain it absolutely from the ground up. So one of the things I was pleased to do a week or so ago was to try to explain our fundamental theory of physics on a livestream aimed at kids, assuming essentially no prior knowledge.

How does one explain discrete space? I decided to start by talking about pixels on a screen. How about networks? Who’s friends with whom. Dimension? Look at 2×2×2… grid graphs. Etc. I thought I managed to get decently far, talking about general relativity, and even quantum mechanics, all, I hope, without relying on more than extremely everyday knowledge.

And particularly since my livestream seemed to get good reviews from both kids and others, I’m planning in the next week or two to put together a written version of this as a kind of “very elementary” introduction to our project.

Length scales

Project Q&A

Thousands of people have been asking us questions about our project. But fortunately, many of the questions have been the same. And over the last couple of weeks we’ve been progressively expanding the Q&A section of the project website to try to address the most common of the questions:

Wolfram Physics Q&A

Visual Gallery

In addition to being (we hope) very interesting from a scientific point of view, our models also produce interesting visual forms. And we’ve started to assemble a “Visual Gallery” of these forms.

They can be screen backgrounds, or Zoom backgrounds. Or they can be turned into stickers or T-shirt designs (or put on mouse pads, if people other than me still use those).

Wolfram Physics Visual Gallery

We’ll be adding lots more items to the Visual Gallery. But it won’t just be pictures. We’ll also be adding 3D geometry for rendering of graphs and hypergraphs.

In principle, this 3D geometry should let one immediately 3D print “universes”. But so far we’ve had difficulty doing this. It seems as if unless we thicken up the connections to the point where they merge into each other, it’s not possible to get enough structural integrity to successfully make a 3D printout with existing technologies. But there’s undoubtedly a solution to this, and we’re hoping someone will figure it out, say using our Wolfram Language computational geometry capabilities.

VR

It’s pretty difficult (at least for me) to “understand” the structure of the graphs and hypergraphs we’re generating. And ever since I started thinking about network models for physics in the 1990s, I’ve wanted to try to use VR to do this. Well, we’re just starting to have a system that lets one interactively manipulate graphs in 3D in VR. We’ll be posting the code soon, and we hope other people will help add features. But it’s getting closer…

Wolfram Physics in VR

It’s an Exciting Time…

This piece is already quite long, but there’s even much more I could say. It’s very exciting to be seeing all this activity around our Physics Project, after only two weeks.

There’s a lot to do in the project, and with the project. This is a time of great opportunity, where all sorts of discoveries are ripe to be made. And I’m certainly enjoying trying to figure out more with our models—and trying to understand all sorts of things I’ve wondered about for nearly half a century. But for me it’s been particularly wonderful to see so many other people engaging with the project. I personally think physics is great. And I really love the elegance of what’s emerging from our models. But right now what’s most important to me is what a tremendous pleasure it is to share all this with such a broad spectrum of people.

I’m looking forward to seeing what the next few weeks bring. We’re off to a really great start…

]]>
https://writings.stephenwolfram.com/2020/04/the-wolfram-physics-project-the-first-two-weeks/feed/ 2
<![CDATA[Finally We May Have a Path to the Fundamental Theory of Physics… <br />and It’s Beautiful</br>]]> https://writings.stephenwolfram.com/2020/04/finally-we-may-have-a-path-to-the-fundamental-theory-of-physics-and-its-beautiful/ https://writings.stephenwolfram.com/2020/04/finally-we-may-have-a-path-to-the-fundamental-theory-of-physics-and-its-beautiful/#comments Tue, 14 Apr 2020 14:05:47 +0000 Stephen Wolfram https://writings.internal.stephenwolfram.com/?p=22525 physics-announce-thumbnailWebsite: Wolfram Physics Project Technical Intro: A Class of Models with the Potential to Represent Fundamental Physics How We Got Here: The Backstory of the Wolfram Physics Project I Never Expected This It’s unexpected, surprising—and for me incredibly exciting. To be fair, at some level I’ve been working towards this for nearly 50 years. But [...]]]> physics-announce-thumbnail

Visual summary of the Wolfram Physics Project

I Never Expected This

It’s unexpected, surprising—and for me incredibly exciting. To be fair, at some level I’ve been working towards this for nearly 50 years. But it’s just in the last few months that it’s finally come together. And it’s much more wonderful, and beautiful, than I’d ever imagined.

In many ways it’s the ultimate question in natural science: How does our universe work? Is there a fundamental theory? An incredible amount has been figured out about physics over the past few hundred years. But even with everything that’s been done—and it’s very impressive—we still, after all this time, don’t have a truly fundamental theory of physics.

Back when I used do theoretical physics for a living, I must admit I didn’t think much about trying to find a fundamental theory; I was more concerned about what we could figure out based on the theories we had. And somehow I think I imagined that if there was a fundamental theory, it would inevitably be very complicated.

But in the early 1980s, when I started studying the computational universe of simple programs I made what was for me a very surprising and important discovery: that even when the underlying rules for a system are extremely simple, the behavior of the system as a whole can be essentially arbitrarily rich and complex.

And this got me thinking: Could the universe work this way? Could it in fact be that underneath all of this richness and complexity we see in physics there are just simple rules? I soon realized that if that was going to be the case, we’d in effect have to go underneath space and time and basically everything we know. Our rules would have to operate at some lower level, and all of physics would just have to emerge.

By the early 1990s I had a definite idea about how the rules might work, and by the end of the 1990s I had figured out quite a bit about their implications for space, time, gravity and other things in physics—and, basically as an example of what one might be able to do with science based on studying the computational universe, I devoted nearly 100 pages to this in my book A New Kind of Science.

I always wanted to mount a big project to take my ideas further. I tried to start around 2004. But pretty soon I got swept up in building Wolfram|Alpha, and the Wolfram Language and everything around it. From time to time I would see physicist friends of mine, and I’d talk about my physics project. There’d be polite interest, but basically the feeling was that finding a fundamental theory of physics was just too hard, and only kooks would attempt it.

It didn’t help that there was something that bothered me about my ideas. The particular way I’d set up my rules seemed a little too inflexible, too contrived. In my life as a computational language designer I was constantly thinking about abstract systems of rules. And every so often I’d wonder if they might be relevant for physics. But I never got anywhere. Until, suddenly, in the fall of 2018, I had a little idea.

It was in some ways simple and obvious, if very abstract. But what was most important about it to me was that it was so elegant and minimal. Finally I had something that felt right to me as a serious possibility for how physics might work. But wonderful things were happening with the Wolfram Language, and I was busy thinking about all the implications of finally having a full-scale computational language.

But then, at our annual Summer School in 2019, there were two young physicists (Jonathan Gorard and Max Piskunov) who were like, “You just have to pursue this!” Physics had been my great passion when I was young, and in August 2019 I had a big birthday and realized that, yes, after all these years I really should see if I can make something work.

So—along with the two young physicists who’d encouraged me—I began in earnest in October 2019. It helped that—after a lifetime of developing them—we now had great computational tools. And it wasn’t long before we started finding what I might call “very interesting things”. We reproduced, more elegantly, what I had done in the 1990s. And from tiny, structureless rules out were coming space, time, relativity, gravity and hints of quantum mechanics.

We were doing zillions of computer experiments, building intuition. And gradually things were becoming clearer. We started understanding how quantum mechanics works. Then we realized what energy is. We found an outline derivation of my late friend and mentor Richard Feynman’s path integral. We started seeing some deep structural connections between relativity and quantum mechanics. Everything just started falling into place. All those things I’d known about in physics for nearly 50 years—and finally we had a way to see not just what was true, but why.

I hadn’t ever imagined anything like this would happen. I expected that we’d start exploring simple rules and gradually, if we were lucky, we’d get hints here or there about connections to physics. I thought maybe we’d be able to have a possible model for the first seconds of the universe, but we’d spend years trying to see whether it might actually connect to the physics we see today.

In the end, if we’re going to have a complete fundamental theory of physics, we’re going to have to find the specific rule for our universe. And I don’t know how hard that’s going to be. I don’t know if it’s going to take a month, a year, a decade or a century. A few months ago I would also have said that I don’t even know if we’ve got the right framework for finding it.

But I wouldn’t say that anymore. Too much has worked. Too many things have fallen into place. We don’t know if the precise details of how our rules are set up are correct, or how simple or not the final rules may be. But at this point I am certain that the basic framework we have is telling us fundamentally how physics works.

It’s always a test for scientific models to compare how much you put in with how much you get out. And I’ve never seen anything that comes close. What we put in is about as tiny as it could be. But what we’re getting out are huge chunks of the most sophisticated things that are known about physics. And what’s most amazing to me is that at least so far we’ve not run across a single thing where we’ve had to say “oh, to explain that we have to add something to our model”. Sometimes it’s not easy to see how things work, but so far it’s always just been a question of understanding what the model already says, not adding something new.

At the lowest level, the rules we’ve got are about as minimal as anything could be. (Amusingly, their basic structure can be expressed in a fraction of a line of symbolic Wolfram Language code.) And in their raw form, they don’t really engage with all the rich ideas and structure that exist, for example, in mathematics. But as soon as we start looking at the consequences of the rules when they’re applied zillions of times, it becomes clear that they’re very elegantly connected to a lot of wonderful recent mathematics.

There’s something similar with physics, too. The basic structure of our models seems alien and bizarrely different from almost everything that’s been done in physics for at least the past century or so. But as we’ve gotten further in investigating our models something amazing has happened: we’ve found that not just one, but many of the popular theoretical frameworks that have been pursued in physics in the past few decades are actually directly relevant to our models.

I was worried this was going to be one of those “you’ve got to throw out the old” advances in science. It’s not. Yes, the underlying structure of our models is different. Yes, the initial approach and methods are different. And, yes, a bunch of new ideas are needed. But to make everything work we’re going to have to build on a lot of what my physicist friends have been working so hard on for the past few decades.

And then there’ll be the physics experiments. If you’d asked me even a couple of months ago when we’d get anything experimentally testable from our models I would have said it was far away. And that it probably wouldn’t happen until we’d pretty much found the final rule. But it looks like I was wrong. And in fact we’ve already got some good hints of bizarre new things that might be out there to look for.

OK, so what do we need to do now? I’m thrilled to say that I think we’ve found a path to the fundamental theory of physics. We’ve built a paradigm and a framework (and, yes, we’ve built lots of good, practical, computational tools too). But now we need to finish the job. We need to work through a lot of complicated computation, mathematics and physics. And see if we can finally deliver the answer to how our universe fundamentally works.

It’s an exciting moment, and I want to share it. I’m looking forward to being deeply involved. But this isn’t just a project for me or our small team. This is a project for the world. It’s going to be a great achievement when it’s done. And I’d like to see it shared as widely as possible. Yes, a lot of what has to be done requires top-of-the-line physics and math knowledge. But I want to expose everything as broadly as possible, so everyone can be involved in—and I hope inspired by—what I think is going to be a great and historic intellectual adventure.

Today we’re officially launching our Physics Project. From here on, we’ll be livestreaming what we’re doing—sharing whatever we discover in real time with the world. (We’ll also soon be releasing more than 400 hours of video that we’ve already accumulated.) I’m posting all my working materials going back to the 1990s, and we’re releasing all our software tools. We’ll be putting out bulletins about progress, and there’ll be educational programs around the project.

Oh, yes, and we’re putting up a Registry of Notable Universes. It’s already populated with nearly a thousand rules. I don’t think any of the ones in there yet are our own universe—though I’m not completely sure. But sometime—I hope soon—there might just be a rule entered in the Registry that has all the right properties, and that we’ll slowly discover that, yes, this is it—our universe finally decoded.

The Wolfram Physics Project

How It Works

OK, so how does it all work? I’ve written a 448-page technical exposition (yes, I’ve been busy the past few months!). Another member of our team (Jonathan Gorard) has written two 60-page technical papers. And there’s other material available at the project website. But here I’m going to give a fairly non-technical summary of some of the high points.

It all begins with something very simple and very structureless. We can think of it as a collection of abstract relations between abstract elements. Or we can think of it as a hypergraph—or, in simple cases, a graph.

We might have a collection of relations like

{{1, 2}, {2, 3}, {3, 4}, {2, 4}}

that can be represented by a graph like

ResourceFunction
&#10005

ResourceFunction[
  "WolframModelPlot"][{{1, 2}, {2, 3}, {3, 4}, {2, 4}}, 
 VertexLabels -> Automatic]

All we’re specifying here are the relations between elements (like {2,3}). The order in which we state the relations doesn’t matter (although the order within each relation does matter). And when we draw the graph, all that matters is what’s connected to what; the actual layout on the page is just a choice made for visual presentation. It also doesn’t matter what the elements are called. Here I’ve used numbers, but all that matters is that the elements are distinct.

OK, so what do we do with these collections of relations, or graphs? We just apply a simple rule to them, over and over again. Here’s an example of a possible rule:

{{x, y}, {x, z}} {{x, z}, {x, w}, {y, w}, {z, w}}

What this rule says is to pick up two relations—from anywhere in the collection—and see if the elements in them match the pattern {{x,y},{x,z}} (or, in the Wolfram Language, {{x_,y_},{x_,z_}}), where the two x’s can be anything, but both have to be the same, and the y and z can be anything. If there’s a match, then replace these two relations with the four relations on the right. The w that appears there is a new element that’s being created, and the only requirement is that it’s distinct from all other elements.

We can represent the rule as a transformation of graphs:

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
     w}}], VertexLabels -> Automatic, "RulePartsAspectRatio" -> 0.5]

Now let’s apply the rule once to:

{{1, 2}, {2, 3}, {3, 4}, {2, 4}}

The {2,3} and {2,4} relations get matched, and the rule replaces them with four new relations, so the result is:

{{1, 2}, {3, 4}, {2, 4}, {2, 5}, {3, 5}, {4, 5}}

We can represent this result as a graph (which happens to be rendered flipped relative to the graph above):

ResourceFunction
&#10005

ResourceFunction[
   "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
     w}}, {{1, 2}, {2, 3}, {3, 4}, {2, 4}}, 1]["FinalStatePlot", 
 VertexLabels -> Automatic]

OK, so what happens if we just keep applying the rule over and over? Here’s the result:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
    w}}, {{1, 2}, {2, 3}, {3, 4}, {2, 4}}, 10, "StatesPlotsList"]

Let’s do it a few more times, and make a bigger picture:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
    w}}, {{1, 2}, {2, 3}, {3, 4}, {2, 4}}, 14, "FinalStatePlot"]

What happened here? We have such a simple rule. Yet applying this rule over and over again produces something that looks really complicated. It’s not what our ordinary intuition tells us should happen. But actually—as I first discovered in the early 1980s—this kind of intrinsic, spontaneous generation of complexity turns out to be completely ubiquitous among simple rules and simple programs. And for example my book A New Kind of Science is about this whole phenomenon and why it’s so important for science and beyond.

But here what’s important about it is that it’s what’s going to make our universe, and everything in it. Let’s review again what we’ve seen. We started off with a simple rule that just tells us how to transform collections of relations. But what we get out is this complicated-looking object that, among other things, seems to have some definite shape.

We didn’t put in anything about this shape. We just gave a simple rule. And using that simple rule a graph was made. And when we visualize that graph, it comes out looking like it has a definite shape.

If we ignore all matter in the universe, our universe is basically a big chunk of space. But what is that space? We’ve had mathematical idealizations and abstractions of it for two thousand years. But what really is it? Is it made of something, and if so, what?

Well, I think it’s very much like the picture above. A whole bunch of what are essentially abstract points, abstractly connected together. Except that in the picture there are 6704 of these points, whereas in our real universe there might be more like 10400 of them, or even many more.

All Possible Rules

We don’t (yet) know an actual rule that represents our universe—and it’s almost certainly not the one we just talked about. So let’s discuss what possible rules there are, and what they typically do.

One feature of the rule we used above is that it’s based on collections of “binary relations”, containing pairs of elements (like {2,3}). But the same setup lets us also consider relations with more elements. For example, here’s a collection of two ternary relations:

{{1, 2, 3}, {3, 4, 5}}

We can’t use an ordinary graph to represent things like this, but we can use a hypergraph—a construct where we generalize edges in graphs that connect pairs of nodes to “hyperedges” that connect any number of nodes:

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][{{1, 2, 3}, {3, 4, 5}}, 
 VertexLabels -> Automatic]

(Notice that we’re dealing with directed hypergraphs, where the order in which nodes appear in a hyperedge matters. In the picture, the “membranes” are just indicating which nodes are connected to the same hyperedge.)

We can make rules for hypergraphs too:

{{x, y, z}} {{w, w, y}, {w, x, z}}

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 2, 3}} -> {{4, 4, 2}, {4, 1, 3}}]]

And now here’s what happens if we run this rule starting from the simplest possible ternary hypergraph—the ternary self-loop {{0,0,0}}:

ResourceFunction
&#10005

ResourceFunction[
   "WolframModel"][{{1, 2, 3}} -> {{4, 4, 2}, {4, 1, 3}}, {{0, 0, 0}},
   8]["StatesPlotsList", "MaxImageSize" -> 180]

Alright, so what happens if we just start picking simple rules at random? Here are some of the things they do:

urules24
&#10005

urules24 = 
 Import["https://www.wolframcloud.com/obj/wolframphysics/Data/22-24-\
2x0-unioned-summary.wxf"]; SeedRandom[6783]; GraphicsGrid[
 Partition[
  ResourceFunction["WolframModelPlot"][List @@@ EdgeList[#]] & /@ 
   Take[Select[
     ParallelMap[
      UndirectedGraph[
        Rule @@@ 
         ResourceFunction["WolframModel"][#, {{0, 0}, {0, 0}}, 8, 
          "FinalState"], 
        GraphLayout -> "SpringElectricalEmbedding"] &, #Rule & /@ 
       RandomSample[urules24, 150]], 
     EdgeCount[#] > 10 && ConnectedGraphQ[#] &], 60], 10], 
 ImageSize -> Full]

Somehow this looks very zoological (and, yes, these models are definitely relevant for things other than fundamental physics—though probably particularly molecular-scale construction). But basically what we see here is that there are various common forms of behavior, some simple, and some not.

Here are some samples of the kinds of things we see:

GraphicsGrid
&#10005

GraphicsGrid[
 Partition[
  ParallelMap[
   ResourceFunction["WolframModel"][#[[1]], #[[2]], #[[3]], 
     "FinalStatePlot"] &, {{{{1, 2}, {1, 3}} -> {{1, 2}, {1, 4}, {2, 
        4}, {4, 3}}, {{0, 0}, {0, 0}}, 
     12}, {{{1, 2}, {1, 3}} -> {{1, 4}, {1, 4}, {2, 4}, {3, 2}}, {{0, 
       0}, {0, 0}}, 
     10}, {{{1, 2}, {1, 3}} -> {{2, 2}, {2, 4}, {1, 4}, {3, 4}}, {{0, 
       0}, {0, 0}}, 
     10}, {{{1, 2}, {1, 3}} -> {{2, 3}, {2, 4}, {3, 4}, {1, 4}}, {{0, 
       0}, {0, 0}}, 
     10}, {{{1, 2}, {1, 3}} -> {{2, 3}, {2, 4}, {3, 4}, {4, 1}}, {{0, 
       0}, {0, 0}}, 
     12}, {{{1, 2}, {1, 3}} -> {{2, 4}, {2, 1}, {4, 1}, {4, 3}}, {{0, 
       0}, {0, 0}}, 
     9}, {{{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {1, 4}, {3, 4}}, {{0, 
       0}, {0, 0}}, 
     10}, {{{1, 2}, {1, 3}} -> {{2, 4}, {2, 4}, {2, 1}, {3, 4}}, {{0, 
       0}, {0, 0}}, 
     10}, {{{1, 2}, {1, 3}} -> {{4, 1}, {1, 4}, {4, 2}, {4, 3}}, {{0, 
       0}, {0, 0}}, 
     12}, {{{1, 2}, {2, 3}} -> {{1, 2}, {2, 1}, {4, 1}, {4, 3}}, {{0, 
       0}, {0, 0}}, 
     10}, {{{1, 2}, {2, 3}} -> {{1, 3}, {1, 4}, {3, 4}, {3, 2}}, {{0, 
       0}, {0, 0}}, 
     10}, {{{1, 2}, {2, 3}} -> {{2, 3}, {2, 4}, {3, 4}, {1, 2}}, {{0, 
       0}, {0, 0}}, 9}}], 4], ImageSize -> Full]

And the big question is: if we were to run rules like these long enough, would they end up making something that reproduces our physical universe? Or, put another way, out in this computational universe of simple rules, can we find our physical universe?

A big question, though, is: How would we know? What we’re seeing here are the results of applying rules a few thousand times; in our actual universe they may have been applied 10500 times so far, or even more. And it’s not easy to bridge that gap. And we have to work it from both sides. First, we have to use the best summary of the operation of our universe that what we’ve learned in physics over the past few centuries has given us. And second, we have to go as far as we can in figuring out what our rules actually do.

And here there’s potentially a fundamental problem: the phenomenon of computational irreducibility. One of the great achievements of the mathematical sciences, starting about three centuries ago, has been delivering equations and formulas that basically tell you how a system will behave without you having to trace each step in what the system does. But many years ago I realized that in the computational universe of possible rules, this very often isn’t possible. Instead, even if you know the exact rule that a system follows, you may still not be able to work out what the system will do except by essentially just tracing every step it takes.

One might imagine that—once we know the rule for some system—then with all our computers and brainpower we’d always be able to “jump ahead” and work out what the system would do. But actually there’s something I call the Principle of Computational Equivalence, which says that almost any time the behavior of a system isn’t obviously simple, it’s computationally as sophisticated as anything. So we won’t be able to “outcompute” it—and to work out what it does will take an irreducible amount of computational work.

Well, for our models of the universe this is potentially a big problem. Because we won’t be able to get even close to running those models for as long as the universe does. And at the outset it’s not clear that we’ll be able to tell enough from what we can do to see if it matches up with physics.

But the big recent surprise for me is that we seem to be lucking out. We do know that whenever there’s computational irreducibility in a system, there are also an infinite number of pockets of computational reducibility. But it’s completely unclear whether in our case those pockets will line up with things we know from physics. And the surprise is that it seems a bunch of them do.

What Is Space?

Let’s look at a particular, simple rule from our infinite collection:

{{x, y, y}, {z, x, u}} {{y, v, y}, {y, z, v}, {u, v, v}}

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 2, 2}, {3, 1, 4}} -> {{2, 5, 2}, {2, 3, 
     5}, {4, 5, 5}}]]

Here’s what it does:

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, ImageSize -> 50] & /@ 
 ResourceFunction[
   "WolframModel"][{{{1, 2, 2}, {3, 1, 4}} -> {{2, 5, 2}, {2, 3, 
      5}, {4, 5, 5}}}, {{0, 0, 0}, {0, 0, 0}}, 20, "StatesList"]

And after a while this is what happens:

Row
&#10005

Row[Append[
  Riffle[ResourceFunction[
       "WolframModel"][{{1, 2, 2}, {3, 1, 4}} -> {{2, 5, 2}, {2, 3, 
         5}, {4, 5, 5}}, {{0, 0, 0}, {0, 0, 0}}, #, 
      "FinalStatePlot"] & /@ {200, 500}, " ... "], " ..."]]

It’s basically making us a very simple “piece of space”. If we keep on going longer and longer it’ll make a finer and finer mesh, to the point where what we have is almost indistinguishable from a piece of a continuous plane.

Here’s a different rule:

{{x, x, y}, {z, u, x}} {{u, u, z}, {v, u, v}, {v, y, x}}

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{x, x, y}, {z, u, x}} -> {{u, u, z}, {v, u, 
     v}, {v, y, x}}]]

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, ImageSize -> 50] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 1, 2}, {3, 4, 1}} -> {{4, 4, 3}, {5, 4, 
     5}, {5, 2, 1}}, {{0, 0, 0}, {0, 0, 0}}, 20, "StatesList"]

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 1, 2}, {3, 4, 1}} -> {{4, 4, 3}, {5, 4, 5}, {5,
     2, 1}}, {{0, 0, 0}, {0, 0, 0}}, 2000, "FinalStatePlot"]

It looks it’s “trying to make” something 3D. Here’s another rule:

{{x, y, z}, {u, y, v}} {{w, z, x}, {z, w, u}, {x, y, w}}

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 2, 3}, {4, 2, 5}} -> {{6, 3, 1}, {3, 6, 
     4}, {1, 2, 6}}]]

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, ImageSize -> 50] & /@ 
 ResourceFunction[
   "WolframModel"][{{x, y, z}, {u, y, v}} -> {{w, z, x}, {z, w, 
     u}, {x, y, w}}, {{0, 0, 0}, {0, 0, 0}}, 20, "StatesList"]

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2, 3}, {4, 2, 5}} -> {{6, 3, 1}, {3, 6, 4}, {1,
     2, 6}}, {{0, 0, 0}, {0, 0, 0}}, 1000, "FinalStatePlot"]

Isn’t this strange? We have a rule that’s just specifying how to rewrite pieces of an abstract hypergraph, with no notion of geometry, or anything about 3D space. And yet it produces a hypergraph that’s naturally laid out as something that looks like a 3D surface.

Even though the only thing that’s really here is connections between points, we can “guess” where a surface might be, then we can show the result in 3D:

ResourceFunction
&#10005

ResourceFunction["GraphReconstructedSurface"][
 ResourceFunction[
   "WolframModel"][ {{1, 2, 3}, {4, 2, 5}} -> {{6, 3, 1}, {3, 6, 
     4}, {1, 2, 6}}, {{0, 0, 0}, {0, 0, 0}}, 2000, "FinalState"]]

If we keep going, then like the example of the plane, the mesh will get finer and finer, until basically our rule has grown us—point by point, connection by connection—something that’s like a continuous 3D surface of the kind you might study in a calculus class. Of course, in some sense, it’s not “really” that surface: it’s just a hypergraph that represents a bunch of abstract relations—but somehow the pattern of those relations gives it a structure that’s a closer and closer approximation to the surface.

And this is basically how I think space in the universe works. Underneath, it’s a bunch of discrete, abstract relations between abstract points. But at the scale we’re experiencing it, the pattern of relations it has makes it seem like continuous space of the kind we’re used to. It’s a bit like what happens with, say, water. Underneath, it’s a bunch of discrete molecules bouncing around. But to us it seems like a continuous fluid.

Needless to say, people have thought that space might ultimately be discrete ever since antiquity. But in modern physics there was never a way to make it work—and anyway it was much more convenient for it to be continuous, so one could use calculus. But now it’s looking like the idea of space being discrete is actually crucial to getting a fundamental theory of physics.

The Dimensionality of Space

A very fundamental fact about space as we experience it is that it is three-dimensional. So can our rules reproduce that? Two of the rules we just saw produce what we can easily recognize as two-dimensional surfaces—in one case flat, in the other case arranged in a certain shape. Of course, these are very bland examples of (two-dimensional) space: they are effectively just simple grids. And while this is what makes them easy to recognize, it also means that they’re not actually much like our universe, where there’s in a sense much more going on.

So, OK, take a case like:

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2, 3}, {4, 3, 5}} -> {{3, 5, 2}, {5, 2, 4}, {2,
     1, 6}}, {{0, 0, 0}, {0, 0, 0}}, 22, "FinalStatePlot"]

If we were to go on long enough, would this make something like space, and, if so, with how many dimensions? To know the answer, we have to have some robust way to measure dimension. But remember, the pictures we’re drawing are just visualizations; the underlying structure is a bunch of discrete relations defining a hypergraph—with no information about coordinates, or geometry, or even topology. And, by the way, to emphasize that point, here is the same graph—with exactly the same connectivity structure—rendered four different ways:

GridGraph
&#10005

GridGraph[{10, 10}, GraphLayout -> #, 
   VertexStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["SpatialGraph",
      "VertexStyle"], 
   EdgeStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["SpatialGraph",
      "EdgeLineStyle"] ] & /@ {"SpringElectricalEmbedding", 
  "TutteEmbedding", "RadialEmbedding", "DiscreteSpiralEmbedding"}

But getting back to the question of dimension, recall that the area of a circle is πr2; the volume of a sphere is . In general, the “volume” of the d-dimensional analog of a sphere is a constant multiplied by rd. But now think about our hypergraph. Start at some point in the hypergraph. Then follow r hyperedges in all possible ways. You’ve effectively made the analog of a “spherical ball” in the hypergraph. Here are examples for graphs corresponding to 2D and 3D lattices:

MakeBallPicture
&#10005

MakeBallPicture[g_, rmax_] := 
  Module[{gg = UndirectedGraph[g], cg}, cg = GraphCenter[gg]; 
   Table[HighlightGraph[gg, NeighborhoodGraph[gg, cg, r]], {r, 0, 
     rmax}]];
Graph[#, ImageSize -> 60, 
   VertexStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["SpatialGraph",
      "VertexStyle"], 
   EdgeStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["SpatialGraph",
      "EdgeLineStyle"] ] & /@ MakeBallPicture[GridGraph[{11, 11}], 7]

MakeBallPicture
&#10005

MakeBallPicture[g_, rmax_] := 
 Module[{gg = UndirectedGraph[g], cg}, cg = GraphCenter[gg]; 
  Table[HighlightGraph[gg, NeighborhoodGraph[gg, cg, r]], {r, 0, 
    rmax}]]; 
Graph[#, ImageSize -> 80, 
   VertexStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["SpatialGraph",
      "VertexStyle"], 
   EdgeStyle -> 
    ResourceFunction["WolframPhysicsProjectStyleData"]["SpatialGraph",
      "EdgeLineStyle"] ] & /@ MakeBallPicture[GridGraph[{7, 7, 7}], 5]

And if you now count the number of points reached by going “graph distance r” (i.e. by following r connections in the graph) you’ll find in these two cases that they indeed grow like r2 and r3.

So this gives us a way to measure the effective dimension of our hypergraphs. Just start at a particular point and see how many points you reach by going r steps:

gg = UndirectedGraph
&#10005

gg = UndirectedGraph[
   ResourceFunction["HypergraphToGraph"][
    ResourceFunction[
      "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, 
        w}, {z, w}}, {{1, 2}, {1, 3}}, 11, "FinalState"]]];
With[{cg = GraphCenter[gg]}, 
 Table[HighlightGraph[gg, NeighborhoodGraph[gg, cg, r], 
   ImageSize -> 90], {r, 6}]]

Now to work out effective dimension, we in principle just have to fit the results to rd. It’s a bit complicated, though, because we need to avoid small r (where every detail of the hypergraph is going to matter) and large r (where we’re hitting the edge of the hypergraph)—and we also need to think about how our “space” is refining as the underlying system evolves. But in the end we can generate a series of fits for the effective dimension—and in this case these say that the effective dimension is about 2.7:

HypergraphDimensionEstimateList
&#10005

HypergraphDimensionEstimateList[hg_] := 
  ResourceFunction["LogDifferences"][
   MeanAround /@ 
    Transpose[
     Values[ResourceFunction["HypergraphNeighborhoodVolumes"][hg, All,
        Automatic]]]];
ListLinePlot[
 Select[Length[#] > 3 &][
  HypergraphDimensionEstimateList /@ 
   Drop[ResourceFunction[
      "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z,
         w}}, {{1, 2}, {1, 3}}, 16, "StatesList"], 4]], Frame -> True,
  PlotStyle -> {Hue[0.9849884156577183, 0.844661839156126, 0.63801], 
   Hue[0.05, 0.9493847125498949, 0.954757], Hue[
   0.0889039442504032, 0.7504362741954692, 0.873304], Hue[
   0.06, 1., 0.8], Hue[0.12, 1., 0.9], Hue[0.08, 1., 1.], Hue[
   0.98654716551403, 0.6728487861309527, 0.733028], Hue[
   0.04, 0.68, 0.9400000000000001], Hue[
   0.9945149844324427, 0.9892162267509705, 0.823529], Hue[
   0.9908289627180552, 0.4, 0.9]}]

If we do the same thing for

ResourceFunction
&#10005

ResourceFunction[
  "WolframModel"][{{1, 2, 2}, {3, 1, 4}} -> {{2, 5, 2}, {2, 3, 
    5}, {4, 5, 5}}, {{0, 0, 0}, {0, 0, 0}}, 200, "FinalStatePlot"]

it’s limiting to dimension 2, as it should:

CenteredDimensionEstimateList
&#10005

CenteredDimensionEstimateList[g_Graph] := 
  ResourceFunction["LogDifferences"][
   N[First[Values[
      ResourceFunction["GraphNeighborhoodVolumes"][g, 
       GraphCenter[g]]]]]];
Show[ListLinePlot[
  Table[CenteredDimensionEstimateList[
    UndirectedGraph[
     ResourceFunction["HypergraphToGraph"][
      ResourceFunction[
        "WolframModel"][{{1, 2, 2}, {3, 1, 4}} -> {{2, 5, 2}, {2, 3, 
          5}, {4, 5, 5}}, {{0, 0, 0}, {0, 0, 0}}, t, 
       "FinalState"]]]], {t, 500, 2500, 500}], Frame -> True, 
  PlotStyle -> {Hue[0.9849884156577183, 0.844661839156126, 0.63801], 
    Hue[0.05, 0.9493847125498949, 0.954757], Hue[
    0.0889039442504032, 0.7504362741954692, 0.873304], Hue[
    0.06, 1., 0.8], Hue[0.12, 1., 0.9], Hue[0.08, 1., 1.], Hue[
    0.98654716551403, 0.6728487861309527, 0.733028], Hue[
    0.04, 0.68, 0.9400000000000001], Hue[
    0.9945149844324427, 0.9892162267509705, 0.823529], Hue[
    0.9908289627180552, 0.4, 0.9]}], 
 Plot[2, {r, 0, 50}, PlotStyle -> Dotted]]

What does the fractional dimension mean? Well, consider fractals, which our rules can easily make:

{{x, y, z}} {{x, u, w}, {y, v, u}, {z, w, v}}

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{1, 2, 3}} -> {{1, 4, 6}, {2, 5, 4}, {3, 6, 5}}]]

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"][#, "MaxImageSize" -> 100] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 2, 3}} -> {{1, 4, 6}, {2, 5, 4}, {3, 6, 
     5}}, {{0, 0, 0}}, 6, "StatesList"]

If we measure the dimension here we get 1.58—the usual fractal dimension for a Sierpiński structure:

HypergraphDimensionEstimateList
&#10005

HypergraphDimensionEstimateList[hg_] := 
 ResourceFunction["LogDifferences"][
  MeanAround /@ 
   Transpose[
    Values[ResourceFunction["HypergraphNeighborhoodVolumes"][hg, All, 
      Automatic]]]]; Show[
 ListLinePlot[
  Drop[HypergraphDimensionEstimateList /@ 
    ResourceFunction[
      "WolframModel"][{{1, 2, 3}} -> {{1, 4, 6}, {2, 5, 4}, {3, 6, 
        5}}, {{0, 0, 0}}, 8, "StatesList"], 2], 
  PlotStyle -> {Hue[0.9849884156577183, 0.844661839156126, 0.63801], 
    Hue[0.05, 0.9493847125498949, 0.954757], Hue[
    0.0889039442504032, 0.7504362741954692, 0.873304], Hue[
    0.06, 1., 0.8], Hue[0.12, 1., 0.9], Hue[0.08, 1., 1.], Hue[
    0.98654716551403, 0.6728487861309527, 0.733028], Hue[
    0.04, 0.68, 0.9400000000000001], Hue[
    0.9945149844324427, 0.9892162267509705, 0.823529], Hue[
    0.9908289627180552, 0.4, 0.9]}, Frame -> True, 
  PlotRange -> {0, Automatic}], 
 Plot[Log[2, 3], {r, 0, 150}, PlotStyle -> {Dotted}]]

Our rule above doesn’t create a structure that’s as regular as this. In fact, even though the rule itself is completely deterministic, the structure it makes looks quite random. But what our measurements suggest is that when we keep running the rule it produces something that’s like 2.7-dimensional space.

Of course, 2.7 is not 3, and presumably this particular rule isn’t the one for our particular universe (though it’s not clear what effective dimension it’d have if we ran it 10100 steps). But the process of measuring dimension shows an example of how we can start making “physics-connectable” statements about the behavior of our rules.

By the way, we’ve been talking about “making space” with our models. But actually, we’re not just trying to make space; we’re trying to make everything in the universe. In standard current physics, there’s space—described mathematically as a manifold—and serving as a kind of backdrop, and then there’s everything that’s in space, all the matter and particles and planets and so on.

But in our models there’s in a sense nothing but space—and in a sense everything in the universe must be “made of space”. Or, put another way, it’s the exact same hypergraph that’s giving us the structure of space, and everything that exists in space.

So what this means is that, for example, a particle like an electron or a photon must correspond to some local feature of the hypergraph, a bit like in this toy example:

Graph
&#10005

Graph[EdgeAdd[
  EdgeDelete[
   NeighborhoodGraph[
    IndexGraph@ResourceFunction["HexagonalGridGraph"][{6, 5}], {42, 
     48, 54, 53, 47, 41}, 4], {30 <-> 29, 42 <-> 41}], {30 <-> 41, 
   42 <-> 29}], 
 VertexSize -> {Small, 
   Alternatives @@ {30, 36, 42, 41, 35, 29} -> Large}, 
 EdgeStyle -> {ResourceFunction["WolframPhysicsProjectStyleData"][
    "SpatialGraph", "EdgeLineStyle"], 
   Alternatives @@ {30 \[UndirectedEdge] 24, 24 \[UndirectedEdge] 18, 
      18 \[UndirectedEdge] 17, 17 \[UndirectedEdge] 23, 
      23 \[UndirectedEdge] 29, 29 \[UndirectedEdge] 35, 
      35 \[UndirectedEdge] 34, 34 \[UndirectedEdge] 40, 
      40 \[UndirectedEdge] 46, 46 \[UndirectedEdge] 52, 
      52 \[UndirectedEdge] 58, 58 \[UndirectedEdge] 59, 
      59 \[UndirectedEdge] 65, 65 \[UndirectedEdge] 66, 
      66 \[UndirectedEdge] 60, 60 \[UndirectedEdge] 61, 
      61 \[UndirectedEdge] 55, 55 \[UndirectedEdge] 49, 
      49 \[UndirectedEdge] 54, 49 \[UndirectedEdge] 43, 
      43 \[UndirectedEdge] 37, 37 \[UndirectedEdge] 36, 
      36 \[UndirectedEdge] 30, 30 \[UndirectedEdge] 41, 
      42 \[UndirectedEdge] 29, 36 \[UndirectedEdge] 42, 
      35 \[UndirectedEdge] 41, 41 \[UndirectedEdge] 47, 
      47 \[UndirectedEdge] 53, 53 \[UndirectedEdge] 54, 
      54 \[UndirectedEdge] 48, 48 \[UndirectedEdge] 42} -> 
    Directive[AbsoluteThickness[2.5], Darker[Red, .2]]}, 
 VertexStyle -> 
  ResourceFunction["WolframPhysicsProjectStyleData"]["SpatialGraph", 
   "VertexStyle"]]

To give a sense of scale, though, I have an estimate that says that 10200 times more “activity” in the hypergraph that represents our universe is going into “maintaining the structure of space” than is going into maintaining all the matter we know exists in the universe.

Curvature in Space & Einstein’s Equations

Here are a few structures that simple examples of our rules make:

GraphicsRow
&#10005

GraphicsRow[{ResourceFunction[
    "WolframModel"][{{1, 2, 2}, {1, 3, 4}} -> {{4, 5, 5}, {5, 3, 
      2}, {1, 2, 5}}, {{0, 0, 0}, {0, 0, 0}}, 1000, "FinalStatePlot"],
   ResourceFunction[
    "WolframModel"][{{1, 1, 2}, {1, 3, 4}} -> {{4, 4, 5}, {5, 4, 
      2}, {3, 2, 5}}, {{0, 0, 0}, {0, 0, 0}}, 1000, "FinalStatePlot"],
   ResourceFunction[
    "WolframModel"][{{1, 1, 2}, {3, 4, 1}} -> {{3, 3, 5}, {2, 5, 
      1}, {2, 6, 5}}, {{0, 0, 0}, {0, 0, 0}}, 2000, 
   "FinalStatePlot"]}, ImageSize -> Full]

But while all of these look like surfaces, they’re all obviously different. And one way to characterize them is by their local curvature. Well, it turns out that in our models, curvature is a concept closely related to dimension—and this fact will actually be critical in understanding, for example, how gravity arises.

But for now, let’s talk about how one would measure curvature on a hypergraph. Normally the area of a circle is πr2. But let’s imagine that we’ve drawn a circle on the surface of a sphere, and now we’re measuring the area on the sphere that’s inside the circle:

cappedSphere
&#10005

cappedSphere[angle_] := 
  Module[{u, v}, 
   With[{spherePoint = {Cos[u] Sin[v], Sin[u] Sin[v], Cos[v]}}, 
    Graphics3D[{First@
         ParametricPlot3D[spherePoint, {v, #1, #2}, {u, 0, 2 \[Pi]}, 
          Mesh -> None, ##3] & @@@ {{angle, \[Pi], 
         PlotStyle -> Lighter[Yellow, .5]}, {0, angle, 
         PlotStyle -> Lighter[Red, .3]}}, 
      First@ParametricPlot3D[
        spherePoint /. v -> angle, {u, 0, 2 \[Pi]}, 
        PlotStyle -> Darker@Red]}, Boxed -> False, 
     SphericalRegion -> False, Method -> {"ShrinkWrap" -> True}]]];
Show[GraphicsRow[Riffle[cappedSphere /@ {0.3, Pi/6, .8}, Spacer[30]]],
  ImageSize -> 250]

This area is no longer πr2. Instead it’s π, where a is the radius of the sphere. In other words, as the radius of the circle gets bigger, the effect of being on the sphere is ever more important. (On the surface of the Earth, imagine a circle drawn around the North Pole; once it gets to the equator, it can never get any bigger.)

If we generalize to d dimensions, it turns out the formula for the growth rate of the volume is , where R is a mathematical object known as the Ricci scalar curvature.

So what this all means is that if we look at the growth rates of spherical balls in our hypergraphs, we can expect two contributions: a leading one of order rd that corresponds to effective dimension, and a “correction” of order r2 that represents curvature.

Here’s an example. Instead of giving a flat estimate of dimension (here equal to 2), we have something that dips down, reflecting the positive (“sphere-like”) curvature of the surface:

res = CloudGet
&#10005

res = CloudGet["https://wolfr.am/L1ylk12R"];
GraphicsRow[{ResourceFunction["WolframModelPlot"][
   ResourceFunction[
     "WolframModel"][{{1, 2, 3}, {4, 2, 5}} -> {{6, 3, 1}, {3, 6, 
       4}, {1, 2, 6}}, {{0, 0, 0}, {0, 0, 0}}, 800, "FinalState"]], 
  ListLinePlot[res, Frame -> True, 
   PlotStyle -> {Hue[0.9849884156577183, 0.844661839156126, 0.63801], 
     Hue[0.05, 0.9493847125498949, 0.954757], Hue[
     0.0889039442504032, 0.7504362741954692, 0.873304], Hue[
     0.06, 1., 0.8], Hue[0.12, 1., 0.9], Hue[0.08, 1., 1.], Hue[
     0.98654716551403, 0.6728487861309527, 0.733028], Hue[
     0.04, 0.68, 0.9400000000000001], Hue[
     0.9945149844324427, 0.9892162267509705, 0.823529], Hue[
     0.9908289627180552, 0.4, 0.9]}]}]

What is the significance of curvature? One thing is that it has implications for geodesics. A geodesic is the shortest distance between two points. In ordinary flat space, geodesics are just lines. But when there’s curvature, the geodesics are curved:

hyperboloidGeodesics
&#10005

(*https://www.wolframcloud.com/obj/wolframphysics/TechPaper-Programs/\
Section-04/Geodesics-01.wl*)
CloudGet["https://wolfr.am/L1PH6Rne"];
hyperboloidGeodesics = Table[
Part[
NDSolve[{Sinh[
         2 u[t]] ((2 Derivative[1][u][t]^2 - Derivative[1][v][t]^2)/(
         2 Cosh[2 u[t]])) + Derivative[2][u][t] == 0, ((2 Tanh[
u[t]]) Derivative[1][u][t]) Derivative[1][v][t] + Derivative[2][v][
        t] == 0, u[0] == -0.9, v[0] == v0, u[1] == 0.9, v[1] == v0}, {
     
u[t], 
v[t]}, {t, 0, 1}, MaxSteps -> Infinity], 1], {v0, 
Range[-0.1, 0.1, 0.025]}];
{SphereGeodesics[Range[-.1, .1, .025]], 
 PlaneGeodesics[Range[-.1, .1, .025]], 
 Show[ParametricPlot3D[{Sinh[u], Cosh[u] Sin[v], 
    Cos[v] Cosh[u]}, {u, -1, 1}, {v, -\[Pi]/3, \[Pi]/3}, 
   Mesh -> False, Boxed -> False, Axes -> False, PlotStyle -> color], 
  ParametricPlot3D[{Sinh[u[t]], Cosh[u[t]] Sin[v[t]], 
       Cos[v[t]] Cosh[u[t]]} /. #, {t, 0, 1}, PlotStyle -> Red] & /@ 
   hyperboloidGeodesics, ViewAngle -> 0.3391233203265557`, 
  ViewCenter -> {{0.5`, 0.5`, 0.5`}, {0.5265689095305934`, 
     0.5477310383268459`}}, 
  ViewPoint -> {1.7628482856617167`, 0.21653966523483362`, 
    2.8801868854502355`}, 
  ViewVertical -> {-0.1654573174671554`, 0.1564093539158781`, 
    0.9737350718261054`}]}

In the case of positive curvature, bundles of geodesics converge; for negative curvature they diverge. But, OK, even though geodesics were originally defined for continuous space (actually, as the name suggests, for paths on the surface of the Earth), one can also have them in graphs (and hypergraphs). And it’s the same story: the geodesic is the shortest path between two points in the graph (or hypergraph).

Here are geodesics on the “positive-curvature surface” created by one of our rules:

findShortestPath
&#10005

findShortestPath[edges_, endpoints : {{_, _} ...}] := 
  FindShortestPath[
     Catenate[Partition[#, 2, 1, 1] & /@ edges], #, #2] & @@@ 
   endpoints;
pathEdges[edges_, path_] := 
  Select[Count[Alternatives @@ path]@# >= 2 &]@edges;
plotGeodesic[edges_, endpoints : {{_, _} ...}, o : OptionsPattern[]] := 
  With[{vertexPaths = findShortestPath[edges, endpoints]}, 
   ResourceFunction["WolframModelPlot"][edges, o, 
    GraphHighlight -> Catenate[vertexPaths], 
    EdgeStyle -> <|
      Alternatives @@ Catenate[pathEdges[edges, #] & /@ vertexPaths] -> 
       Directive[AbsoluteThickness[4], Red]|>]];
plotGeodesic[edges_, endpoints : {__ : Except@List}, 
   o : OptionsPattern[]] := plotGeodesic[edges, {endpoints}, o];
plotGeodesic[
 ResourceFunction[
   "WolframModel"][{{1, 2, 3}, {4, 2, 5}} -> {{6, 3, 1}, {3, 6, 
     4}, {1, 2, 6}}, Automatic, 1000, 
  "FinalState"], {{123, 721}, {24, 552}, {55, 671}}, 
 VertexSize -> 0.12]

And here they are for a more complicated structure:

gtest = UndirectedGraph
&#10005

(*https://www.wolframcloud.com/obj/wolframphysics/TechPaper-Programs/\
Section-04/Geodesics-01.wl*)

CloudGet["https://wolfr.am/L1PH6Rne"];(*Geodesics*)

gtest = UndirectedGraph[
   Rule @@@ 
    ResourceFunction[
      "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z,
         w}}, {{1, 2}, {1, 3}}, 10, "FinalState"], Sequence[
   VertexStyle -> ResourceFunction["WolframPhysicsProjectStyleData"][
     "SpatialGraph", "VertexStyle"], 
    EdgeStyle -> ResourceFunction["WolframPhysicsProjectStyleData"][
     "SpatialGraph", "EdgeLineStyle"]] ];
Geodesics[gtest, #] & /@ {{{79, 207}}, {{143, 258}}}

Why are geodesics important? One reason is that in Einstein’s general relativity they’re the paths that light (or objects in “free fall”) follows in space. And in that theory gravity is associated with curvature in space. So when something is deflected going around the Sun, that happens because space around the Sun is curved, so the geodesic the object follows is also curved.

General relativity’s description of curvature in space turns out to all be based on the Ricci scalar curvature R that we encountered above (as well as the slightly more sophisticated Ricci tensor). But so if we want to find out if our models are reproducing Einstein’s equations for gravity, we basically have to find out if the Ricci curvatures that arise from our hypergraphs are the same as the theory implies.

There’s quite a bit of mathematical sophistication involved (for example, we have to consider curvature in space+time, not just space), but the bottom line is that, yes, in various limits, and subject to various assumptions, our models do indeed reproduce Einstein’s equations. (At first, we’re just reproducing the vacuum Einstein equations, appropriate when there’s no matter involved; when we discuss matter, we’ll see that we actually get the full Einstein equations.)

It’s a big deal to reproduce Einstein’s equations. Normally in physics, Einstein’s equations are what you start from (or sometimes they arise as a consistency condition for a theory): here they’re what comes out as an emergent feature of the model.

It’s worth saying a little about how the derivation works. It’s actually somewhat analogous to the derivation of the equations of fluid flow from the limit of the underlying dynamics of lots of discrete molecules. But in this case, it’s the structure of space rather than the velocity of a fluid that we’re computing. It involves some of the same kinds of mathematical approximations and assumptions, though. One has to assume, for example, that there’s enough effective randomness generated in the system that statistical averages work. There is also a whole host of subtle mathematical limits to take. Distances have to be large compared to individual hypergraph connections, but small compared to the whole size of the hypergraph, etc.

It’s pretty common for physicists to “hack through” the mathematical niceties. That’s actually happened for nearly a century in the case of deriving fluid equations from molecular dynamics. And we’re definitely guilty of the same thing here. Which in a sense is another way of saying that there’s lots of nice mathematics to do in actually making the derivation rigorous, and understanding exactly when it’ll apply, and so on.

By the way, when it comes to mathematics, even the setup that we have is interesting. Calculus has been built to work in ordinary continuous spaces (manifolds that locally approximate Euclidean space). But what we have here is something different: in the limit of an infinitely large hypergraph, it’s like a continuous space, but ordinary calculus doesn’t work on it (not least because it isn’t necessarily integer-dimensional). So to really talk about it well, we have to invent something that’s kind of a generalization of calculus, that’s for example capable of dealing with curvature in fractional-dimensional space. (Probably the closest current mathematics to this is what’s been coming out of the very active field of geometric group theory.)

It’s worth noting, by the way, that there’s a lot of subtlety in the precise tradeoff between changing the dimension of space, and having curvature in it. And while we think our universe is three-dimensional, it’s quite possible according to our models that there are at least local deviations—and most likely there were actually large deviations in the early universe.

Time

In our models, space is defined by the large-scale structure of the hypergraph that represents our collection of abstract relations. But what then is time?

For the past century or so, it’s been pretty universally assumed in fundamental physics that time is in a sense “just like space”—and that one should for example lump space and time together and talk about the “spacetime continuum”. And certainly the theory of relativity points in this direction. But if there’s been one “wrong turn” in the history of physics in the past century, I think it’s the assumption that space and time are the same kind of thing. And in our models they’re not—even though, as we’ll see, relativity comes out just fine.

So what then is time? In effect it’s much as we experience it: the inexorable process of things happening and leading to other things. But in our models it’s something much more precise: it’s the progressive application of rules, that continually modify the abstract structure that defines the contents of the universe.

The version of time in our models is in a sense very computational. As time progresses we are in effect seeing the results of more and more steps in a computation. And indeed the phenomenon of computational irreducibility implies that there is something definite and irreducible “achieved” by this process. (And, for example, this irreducibility is what I believe is responsible for the “encrypting” of initial conditions that is associated with the law of entropy increase, and the thermodynamic arrow of time.) Needless to say, of course, our modern computational paradigm did not exist a century ago when “spacetime” was introduced, and perhaps if it had, the history of physics might have been very different.

But, OK, so in our models time is just the progressive application of rules. But there is a subtlety in exactly how this works that might at first seem like a detail, but that actually turns out to be huge, and in fact turns out to be the key to both relativity and quantum mechanics.

At the beginning of this piece, I talked about the rule

{{x, y}, {x, z}} {{x, z}, {x, w}, {y, w}, {z, w}}

RulePlot
&#10005

RulePlot[ResourceFunction[
   "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
     w}}], VertexLabels -> Automatic, "RulePartsAspectRatio" -> 0.55]

and showed the “first few steps” in applying it

ResourceFunction
&#10005

ResourceFunction["WolframModelPlot"] /@ 
 ResourceFunction[
   "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
     w}}, {{1, 2}, {2, 3}, {3, 4}, {2, 4}}, 4, "StatesList"]

But how exactly did the rule get applied? What is “inside” these steps? The rule defines how to take two connections in the hypergraph (which in this case is actually just a graph) and transform them into four new connections, creating a new element in the process. So each “step” that we showed before actually consists of several individual “updating events” (where here newly added connections are highlighted, and ones that are about to be removed are dashed):

With
&#10005

With[{eo = 
   ResourceFunction[
     "WolframModel"][{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
       w}}, {{1, 2}, {2, 3}, {3, 4}, {2, 4}}, 4]}, 
 TakeList[eo["EventsStatesPlotsList", ImageSize -> 130], 
  eo["GenerationEventsCountList", 
   "IncludeBoundaryEvents" -> "Initial"]]]

But now, here is the crucial point: this is not the only sequence of updating events consistent with the rule. The rule just says to find two adjacent connections, and if there are several possible choices, it says nothing about which one. And a crucial idea in our model is in a sense just to do all of them.

We can represent this with a graph that shows all possible paths:

CloudGet
&#10005

CloudGet["https://wolfr.am/LmHho8Tr"]; (*newgraph*)newgraph[
 Graph[ResourceFunction["MultiwaySystem"][
   "WolframModel" -> {{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z,
         w}}}, {{{1, 2}, {2, 3}, {3, 4}, {2, 4}}}, 3, "StatesGraph", 
   VertexSize -> 3, PerformanceGoal -> "Quality"], 
  AspectRatio -> 1/2], {3, 0.7}]

For the very first update, there are two possibilities. Then for each of the results of these, there are four additional possibilities. But at the next update, something important happens: two of the branches merge. In other words, even though we have done a different sequence of updates, the outcome is the same.

Things rapidly get complicated. Here is the graph after one more update, now no longer trying to show a progression down the page:

Graph
&#10005

Graph[ResourceFunction["MultiwaySystem"][
  "WolframModel" -> {{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, 
       w}}}, {{{1, 2}, {2, 3}, {3, 4}, {2, 4}}}, 4, "StatesGraph", 
  VertexSize -> 3, PerformanceGoal -> "Quality"]]

So how does this relate to time? What it says is that in the basic statement of the model there is not just one path of time; there are many paths, and many “histories”. But the model—and the rule that is used—determines all of them. And we have seen a hint of something else: that even if we might think we are following an “independent” path of history, it may actually merge with another path.

It will take some more discussion to explain how this all works. But for now let me say that what will emerge is that time is about causal relationships between things, and that in fact, even when the paths of history that are followed are different, these causal relationships can end up being the same—and that in effect, to an observer embedded in the system, there is still just a single thread of time.

The Graph of Causal Relationships

In the end it’s wonderfully elegant. But to get to the point where we can understand the elegant bigger picture we need to go through some detailed things. (It isn’t terribly surprising that a fundamental theory of physics—inevitably built on very abstract ideas—is somewhat complicated to explain, but so it goes.)

To keep things tolerably simple, I’m not going to talk directly about rules that operate on hypergraphs. Instead I’m going to talk about rules that operate on strings of characters. (To clarify: these are not the strings of string theory—although in a bizarre twist of “pun-becomes-science” I suspect that the continuum limit of the operations I discuss on character strings is actually related to string theory in the modern physics sense.)

OK, so let’s say we have the rule:

{A BBB, BB A}

This rule says that anywhere we see an A, we can replace it with BBB, and anywhere we see BB we can replace it with A. So now we can generate what we call the multiway system for this rule, and draw a “multiway graph” that shows everything that can happen:

ResourceFunction
&#10005

ResourceFunction["MultiwaySystem"][{"A" -> "BBB", 
  "BB" -> "A"}, {"A"}, 8, "StatesGraph"]

At the first step, the only possibility is to use ABBB to replace the A with BBB. But then there are two possibilities: replace either the first BB or the second BB—and these choices give different results. On the next step, though, all that can be done is to replace the A—in both cases giving BBBB.

So in other words, even though we in a sense had two paths of history that diverged in the multiway system, it took only one step for them to converge again. And if you trace through the picture above you’ll find out that’s what always happens with this rule: every pair of branches that is produced always merges, in this case after just one more step.

This kind of balance between branching and merging is a phenomenon I call “causal invariance”. And while it might seem like a detail here, it actually turns out that it’s at the core of why relativity works, why there’s a meaningful objective reality in quantum mechanics, and a host of other core features of fundamental physics.

But let’s explain why I call the property causal invariance. The picture above just shows what “state” (i.e. what string) leads to what other one. But at the risk of making the picture more complicated (and note that this is incredibly simple compared to the full hypergraph case), we can annotate the multiway graph by including the updating events that lead to each transition between states:

LayeredGraphPlot
&#10005

LayeredGraphPlot[
 ResourceFunction["MultiwaySystem"][{"A" -> "BBB", 
   "BB" -> "A"}, {"A"}, 8, "EvolutionEventsGraph"], AspectRatio -> 1]

But now we can ask the question: what are the causal relationships between these events? In other words, what event needs to happen before some other event can happen? Or, said another way, what events must have happened in order to create the input that’s needed for some other event?

Let us go even further, and annotate the graph above by showing all the causal dependencies between events:

LayeredGraphPlot
&#10005

LayeredGraphPlot[
 ResourceFunction["MultiwaySystem"][{"A" -> "BBB", 
   "BB" -> "A"}, {"A"}, 7, "EvolutionCausalGraph"], AspectRatio -> 1]

The orange lines in effect show which event has to happen before which other event—or what all the causal relationships in the multiway system are. And, yes, it’s complicated. But note that this picture shows the whole multiway system—with all possible paths of history—as well as the whole network of causal relationships within and between these paths.

But here’s the crucial thing about causal invariance: it implies that actually the graph of causal relationships is the same regardless of which path of history is followed. And that’s why I originally called this property “causal invariance”—because it says that with a rule like this, the causal properties are invariant with respect to different choices of the sequence in which updating is done.

And if one traced through the picture above (and went quite a few more steps), one would find that for every path of history, the causal graph representing causal relationships between events would always be:

ResourceFunction
&#10005

ResourceFunction["SubstitutionSystemCausalGraph"][{"A" -> "BBB", 
   "BB" -> "A"}, "A", 10] // LayeredGraphPlot

or, drawn differently,

ResourceFunction
&#10005

ResourceFunction["SubstitutionSystemCausalGraph"][{"A" -> "BBB", 
  "BB" -> "A"}, "A", 12]

The Importance of Causal Invariance

To understand more about causal invariance, it’s useful to look at an even simpler example: the case of the rule BAAB. This rule says that any time there’s a B followed by an A in a string, swap these characters around. In other words, this is a rule that tries to sort a string into alphabetical order, two characters at a time.

Let’s say we start with BBBAAA. Then here’s the multiway graph that shows all the things that can happen according to the rule:

Graph
&#10005

Graph[ResourceFunction["MultiwaySystem"][{"BA" -> "AB"}, "BBBAAA", 12,
    "EvolutionEventsGraph"], AspectRatio -> 1.5] // LayeredGraphPlot

There are lots of different paths that can be followed, depending on which BA in the string the rule is applied to at each step. But the important thing we see is that at the end all the paths merge, and we get a single final result: the sorted string AAABBB. And the fact that we get this single final result is a consequence of the causal invariance of the rule. In a case like this where there’s a final result (as opposed to just evolving forever), causal invariance basically says: it doesn’t matter what order you do all the updates in; the result you’ll get will always be the same.

I’ve introduced causal invariance in the context of trying to find a model of fundamental physics—and I’ve said that it’s going to be critical to both relativity and quantum mechanics. But actually what amounts to causal invariance has been seen before in various different guises in mathematics, mathematical logic and computer science. (Its most common name is “confluence”, though there are some technical differences between this and what I call causal invariance.)

Think about expanding out an algebraic expression, like (x + (1 + x)2)(x + 2)2. You could expand one of the powers first, then multiply things out. Or you could multiply the terms first. It doesn’t matter what order you do the steps in; you’ll always get the same canonical form (which in this case Mathematica tells me is 4 + 16x + 17x2 + 7x3 + x4). And this independence of orders is essentially causal invariance.

Here’s one more example. Imagine you’ve got some recursive definition, say f[n_]:=f[n-1]+f[n-2] (with f[0]=f[1]=1). Now evaluate f[10]. First you get f[9]+f[8]. But what do you do next? Do you evaluate f[9], or f[8]? And then what? In the end, it doesn’t matter; you’ll always get 55. And this is another example of causal invariance.

When one thinks about parallel or asynchronous algorithms, it’s important if one has causal invariance. Because it means one can do things in any order—say, depth-first, breadth-first, or whatever—and one will always get the same answer. And that’s what’s happening in our little sorting algorithm above.

OK, but now let’s come back to causal relationships. Here’s the multiway system for the sorting process annotated with all causal relationships for all paths:

Magnify
&#10005

Magnify[LayeredGraphPlot[
  ResourceFunction["MultiwaySystem"][{"BA" -> "AB"}, "BBBAAA", 12, 
   "EvolutionCausalGraph"], AspectRatio -> 1.5], .6]

And, yes, it’s a mess. But because there’s causal invariance, we know something very important: this is basically just a lot of copies of the same causal graph—a simple grid:

centeredRange
&#10005

centeredRange[n_] := # - Mean@# &@Range@n;
centeredLayer[n_] := {#, n} & /@ centeredRange@n;
diamondLayerSizes[layers_?OddQ] := 
  Join[#, Reverse@Most@#] &@Range[(layers + 1)/2];
diamondCoordinates[layers_?OddQ] := 
  Catenate@MapIndexed[
    Thread@{centeredRange@#, (layers - First@#2)/2} &, 
    diamondLayerSizes[layers]];
diamondGraphLayersCount[graph_] := 2 Sqrt[VertexCount@graph] - 1;
With[{graph = 
   ResourceFunction["SubstitutionSystemCausalGraph"][{"BA" -> "AB"}, 
    "BBBBAAAA", 12]}, 
 Graph[graph, 
  VertexCoordinates -> 
   diamondCoordinates@diamondGraphLayersCount@graph, VertexSize -> .2]]

(By the way—as the picture suggests—the cross-connections between these copies aren’t trivial, and later on we’ll see they’re associated with deep relations between relativity and quantum mechanics, that probably manifest themselves in the physics of black holes. But we’ll get to that later…)

OK, so every different way of applying the sorting rule is supposed to give the same causal graph. So here’s one example of how we might apply the rule starting with a particular initial string:

evo = (SeedRandom
&#10005

evo = (SeedRandom[2424]; 
   ResourceFunction[
     "SubstitutionSystemCausalEvolution"][{"BA" -> "AB"}, 
    "BBAAAABAABBABBBBBAAA", 15, {"Random", 4}]);
ResourceFunction["SubstitutionSystemCausalPlot"][evo, 
 EventLabels -> False, CellLabels -> True, CausalGraph -> False]

But now let’s show the graph of causal connections. And we see it’s just a grid:

evo = (SeedRandom
&#10005

evo = (SeedRandom[2424]; 
   ResourceFunction[
     "SubstitutionSystemCausalEvolution"][{"BA" -> "AB"}, 
    "BBAAAABAABBABBBBBAAA", 15, {"Random", 4}]);
ResourceFunction["SubstitutionSystemCausalPlot"][evo, 
 EventLabels -> False, CellLabels -> False, CausalGraph -> True]

Here are three other possible sequences of updates:

SeedRandom
&#10005

SeedRandom[242444]; GraphicsRow[
 Table[ResourceFunction["SubstitutionSystemCausalPlot"][
   ResourceFunction[
     "SubstitutionSystemCausalEvolution"][{"BA" -> "AB"}, 
    "BBAAAABAABBABBBBBAAA", 15, {"Random", 4}], EventLabels -> False, 
   CellLabels -> False, CausalGraph -> True], 3], ImageSize -> Full]

But now we see causal invariance in action: even though different updates occur at different times, the graph of causal relationships between updating events is always the same. And having seen this—in the context of a very simple example—we’re ready to talk about special relativity.

Deriving Special Relativity

It’s a typical first instinct in thinking about doing science: you imagine doing an experiment on a system, but you—as the “observer”—are outside the system. Of course if you’re thinking about modeling the whole universe and everything in it, this isn’t ultimately a reasonable way to think about things. Because the “observer” is inevitably part of the universe, and so has to be modeled just like everything else.

In our models what this means is that the “mind of the observer”, just like everything else in the universe, has to get updated through a series of updating events. There’s no absolute way for the observer to “know what’s going on in the universe”; all they ever experience is a series of updating events, that may happen to be affected by updating events occurring elsewhere in the universe. Or, said differently, all the observer can ever observe is the network of causal relationships between events—or the causal graph that we’ve been talking about.

So as toy model let’s look at our BAAB rule for strings. We might imagine that the string is laid out in space. But to our observer the only thing they know is the causal graph that represents causal relationships between events. And for the BAAB system here’s one way we can draw that:

CloudGet
&#10005

CloudGet["https://wolfr.am/KVkTxvC5"]; (*regularCausalGraphPlot*)

CloudGet["https://wolfr.am/KVl97Tf4"];(*lorentz*)
\
regularCausalGraphPlot[10, {0, 0}, {0.0, 0.0}, lorentz[0]]

But now let’s think about how observers might “experience” this causal graph. Underneath, an observer is getting updated by some sequence of updating events. But even though that’s “really what’s going on”, to make sense of it, we can imagine our observers setting up internal “mental” models for what they see. And a pretty natural thing for observers like us to do is just to say “one set of things happens all across the universe, then another, and so on”. And we can translate this into saying that we imagine a series of “moments” in time, where things happen “simultaneously” across the universe—at least with some convention for defining what we mean by simultaneously. (And, yes, this part of what we’re doing is basically following what Einstein did when he originally proposed special relativity.)

Here’s a possible way of doing it:

CloudGet
&#10005

CloudGet["https://wolfr.am/KVkTxvC5"]; (*regularCausalGraphPlot*)

CloudGet["https://wolfr.am/KVl97Tf4"];(*lorentz*)
\
regularCausalGraphPlot[10, {1, 0}, {0.0, 0.0}, lorentz[0]]

One can describe this as a “foliation” of the causal graph. We’re dividing the causal graph into leaves or slices. And each slice our observers can consider to be a “successive moment in time”.

It’s important to note that there are some constraints on the foliation we can pick. The causal graph defines what event has to happen before what. And if our observers are going to have a chance of making sense of the world, it had better be the case that their notion of the progress of time aligns with what the causal graph says. So for example this foliation wouldn’t work—because basically it says that the time we assign to events is going to disagree with the order in which the causal graph says they have to happen:

CloudGet
&#10005

CloudGet["https://wolfr.am/KVkTxvC5"]; (*regularCausalGraphPlot*)

CloudGet["https://wolfr.am/KVl97Tf4"];(*lorentz*)
\
regularCausalGraphPlot[6, {.2, 0}, {5, 0.0}, lorentz[0]]

But, so given the foliation above, what actual order of updating events does it imply? It basically just says: as many events as possible happen at the same time (i.e. in the same slice of the foliation), as in this picture:

ResourceFunction["SubstitutionSystemCausalPlot"]
&#10005

(*https://www.wolframcloud.com/obj/wolframphysics/TechPaper-Programs/\
Section-08/BoostedEvolution.wl*)
CloudGet["https://wolfr.am/LbaDFVSn"]; (*boostedEvolution*) \
ResourceFunction["SubstitutionSystemCausalPlot"][
  boostedEvolution[
   ResourceFunction[
     "SubstitutionSystemCausalEvolution"][{"BA" -> "AB"}, 
    StringRepeat["BA", 10], 10], 0], EventLabels -> False, 
  CellLabels -> True, CausalGraph -> False]

OK, now let’s connect this to physics. The foliation we had above is relevant to observers who are somehow “stationary with respect to the universe” (the “cosmological rest frame”). One can imagine that as time progresses, the events a particular observer experiences are ones in a column going vertically down the page:

CloudGet
&#10005

CloudGet["https://wolfr.am/KVkTxvC5"]; (*regularCausalGraphPlot*)

CloudGet["https://wolfr.am/KVl97Tf4"];(*lorentz*)
\
regularCausalGraphPlot[5, {1, 0.01}, {0.0, 0.0}, {1.5, 0}, {Red, 
  Directive[Dotted, Thick, Red]}, lorentz[0]]

But now let’s think about an observer who is uniformly moving in space. They’ll experience a different sequence of events, say:

CloudGet
&#10005

CloudGet["https://wolfr.am/KVkTxvC5"]; (*regularCausalGraphPlot*)

CloudGet["https://wolfr.am/KVl97Tf4"];(*lorentz*)
\
regularCausalGraphPlot[5, {1, 0.01}, {0.0, 0.3}, {0.6, 0}, {Red, 
  Directive[Dotted, Thick, Red]}, lorentz[0]]

And that means that the foliation they’ll naturally construct will be different. From the “outside” we can draw it on the causal graph like this:

CloudGet
&#10005

CloudGet["https://wolfr.am/KVkTxvC5"]; (*regularCausalGraphPlot*)

CloudGet["https://wolfr.am/KVl97Tf4"];(*lorentz*)
\
regularCausalGraphPlot[10, {1, 0.01}, {0.3, 0.3}, {0, 0}, {Red, 
  Directive[Dotted, Thick, Red]}, lorentz[0.]]

But to the observer each slice just represents a successive moment of time. And they don’t have any way to know how the causal graph was drawn. So they’ll construct their own version, where the slices are horizontal:

CloudGet
&#10005

CloudGet["https://wolfr.am/KVkTxvC5"]; (*regularCausalGraphPlot*)

CloudGet["https://wolfr.am/KVl97Tf4"];(*lorentz*)
\
regularCausalGraphPlot[10, {1, 0.01}, {0.3, 0.3}, {0, 0}, {Red, 
  Directive[Dotted, Thick, Red]}, lorentz[0.3]]

But now there’s a purely geometrical fact: to make this rearrangement, while preserving the basic structure (and here, angles) of the causal graph, each moment of time has to sample fewer events in the causal graph, by a factor of where β is the angle that represents the velocity of the observer.

If you know about special relativity, you’ll recognize a lot of this. What we’ve been calling foliations correspond directly to relativity’s “reference frames”. And our foliations that represent motion are the standard inertial reference frames of special relativity.

But here’s the special thing that’s going on here: we can interpret all this discussion of foliations and reference frames in terms of the actual rules and evolution of our underlying system. So here now is the evolution of our string-sorting system in the “boosted reference frame” corresponding to an observer going at a certain speed:

CloudGet
&#10005

(*https://www.wolframcloud.com/obj/wolframphysics/TechPaper-Programs/\
Section-08/BoostedEvolution.wl*)
CloudGet["https://wolfr.am/LbaDFVSn"]; (*boostedEvolution*) \
ResourceFunction["SubstitutionSystemCausalPlot"][
  boostedEvolution[
   ResourceFunction[
     "SubstitutionSystemCausalEvolution"][{"BA" -> "AB"}, 
    StringRepeat["BA", 10], 10], 0.3], EventLabels -> False, 
  CellLabels -> True, CausalGraph -> False]

And here’s the crucial point: because of causal invariance it doesn’t matter that we’re in a different reference frame—the causal graph for the system (and the way it eventually sorts the string) is exactly the same.

In special relativity, the key idea is that the “laws of physics” work the same in all inertial reference frames. But why should that be true? Well, in our systems, there’s an answer: it’s a consequence of causal invariance in the underlying rules. In other words, from the property of causal invariance, we’re able to derive relativity.

Normally in physics one puts in relativity by the way one sets up the mathematical structure of spacetime. But in our models we don’t start from anything like this, and in fact space and time are not even at all the same kind of thing. But what we can now see is that—because of causal invariance—relativity emerges in our models, with all the relationships between space and time that that implies.

So, for example, if we look at the picture of our string-sorting system above, we can see relativistic time dilation. In effect, because of the foliation we picked, time operates slower. Or, said another way, in the effort to sample space faster, our observer experiences slower updating of the system in time.

The speed of light c in our toy system is defined by the maximum rate at which information can propagate, which is determined by the rule, and in the case of this rule is one character per step. And in terms of this, we can then say that our foliation corresponds to a speed 0.3 c. But now we can look at the amount of time dilation, and it’s exactly the amount that relativity says it should be.

By the way, if we imagine trying to make our observer go “faster than light”, we can see that can’t work. Because there’s no way to tip the foliation at more than 45° in our picture, and still maintain the causal relationships implied by the causal graph.

OK, so in our toy model we can derive special relativity. But here’s the thing: this derivation isn’t specific to the toy model; it applies to any rule that has causal invariance. So even though we may be dealing with hypergraphs, not strings, and we may have a rule that shows all kinds of complicated behavior, if it ultimately has causal invariance, then (with various technical caveats, mostly about possible wildness in the causal graph) it will exhibit relativistic invariance, and a physics based on it will follow special relativity.

What Is Energy? What Is Mass?

In our model, everything in the universe—space, matter, whatever—is supposed to be represented by features of our evolving hypergraph. So within that hypergraph, is there a way to identify things that are familiar from current physics, like mass, or energy?

I have to say that although it’s a widespread concept in current physics, I’d never thought of energy as something fundamental. I’d just thought of it as an attribute that things (atoms, photons, whatever) can have. I never really thought of it as something that one could identify abstractly in the very structure of the universe.

So it came as a big surprise when we recently realized that actually in our model, there is something we can point to, and say “that’s energy!”, independent of what it’s the energy of. The technical statement is: energy corresponds to the flux of causal edges through spacelike hypersurfaces. And, by the way, momentum corresponds to the flux of causal edges through timelike hypersurfaces.

OK, so what does this mean? First, what’s a spacelike hypersurface? It’s actually a standard concept in general relativity, for which there’s a direct analogy in our models. Basically it’s what forms a slice in our foliation. Why is it called what it’s called? We can identify two kinds of directions: spacelike and timelike.

A spacelike direction is one that involves just moving in space—and it’s a direction where one can always reverse and go back. A timelike direction is one that involves also progressing through time—where one can’t go back. We can mark spacelike () and timelike () hypersurfaces in the causal graph for our toy model:

CloudGet
&#10005

CloudGet["https://wolfr.am/KVkTxvC5"]; (*regularCausalGraphPlot*)

CloudGet["https://wolfr.am/KVl97Tf4"];(*lorentz*)
\
regularCausalGraphPlot[10, {1, 0.5}, {0., 0.}, {-0.5, 0}, {Red, 
  Directive[Dashed, Red]}, lorentz[0.]]

(They might be called “surfaces”, except that “surfaces” are usually thought of as 2-dimensional, and our 3-space + 1-time dimensional universe, these foliation slices are 3-dimensional: hence the term “hypersurfaces”.)

OK, now let’s look at the picture. The “causal edges” are the causal connections between events, shown in the picture as lines joining the events. So when we talk about a “flux of causal edges through spacelike hypersurfaces”, what we’re talking about is the net number of causal edges that go down through the horizontal slices in the pictures.

In the toy model that’s trivial to see. But here’s a causal graph from a simple hypergraph model, where it’s already considerably more complicated:

Graph
&#10005

Graph[ResourceFunction[
   "WolframModel"][  {{x, y}, {z, y}} -> {{x, z}, {y, z}, {w, 
     z}}, {{0, 0}, {0, 0}}, 15, "LayeredCausalGraph"], 
 AspectRatio -> 1/2]

(Our toy-model causal graph starts from a line of events because we set up a long string as the initial condition; this starts from a single event because it’s starting from a minimal initial condition.)

But when we put a foliation on this causal graph (thereby effectively defining our reference frame) we can start counting how many causal edges go down through successive (“spacelike”) slices:

foliationLines
&#10005

foliationLines[{lineDensityHorizontal_ : 1, 
    lineDensityVertical_ : 1}, {tanHorizontal_ : 0.0, 
    tanVertical_ : 0.0}, offset : {_, _} : {0, 0}, 
   lineStyles : {_, _} : {Red, Red}, 
   transform_ : (# &)] := {If[lineDensityHorizontal != 0, 
    Style[Table[
      Line[transform /@ {{-100 + First@offset, 
          k - 100 tanHorizontal + Last@offset}, {100 + First@offset, 
          k + 100 tanHorizontal + Last@offset}}], {k, -100.5, 100.5, 
       1/lineDensityHorizontal}], First@lineStyles], {}], 
   If[lineDensityVertical != 0, 
    Style[Table[
      Line[transform /@ {{k - 100 tanVertical + First@offset, -100 + 
           Last@offset}, {k + 100 tanVertical + First@offset, 
          100 + Last@offset}}], {k, -100.5, 100.5, 
       1/lineDensityVertical}], Last@lineStyles], {}]};
ResourceFunction[
   "WolframModel"][{{x, y}, {z, y}} -> {{x, z}, {y, z}, {w, z}}, {{0, 
    0}, {0, 0}}, 15]["LayeredCausalGraph", AspectRatio -> 1/2, 
 Epilog -> 
  foliationLines[{0.44, 0}, {0, 
    0}, {0, -0.5}, {Directive[Red, Opacity[0.2]], Red}]]

We can also ask how many causal edges go “sideways”, through timelike hypersurfaces:

foliationLines
&#10005

foliationLines[{lineDensityHorizontal_ : 1, 
    lineDensityVertical_ : 1}, {tanHorizontal_ : 0.0, 
    tanVertical_ : 0.0}, offset : {_, _} : {0, 0}, 
   lineStyles : {_, _} : {Red, Red}, 
   transform_ : (# &)] := {If[lineDensityHorizontal != 0, 
    Style[Table[
      Line[transform /@ {{-100 + First@offset, 
          k - 100 tanHorizontal + Last@offset}, {100 + First@offset, 
          k + 100 tanHorizontal + Last@offset}}], {k, -100.5, 100.5, 
       1/lineDensityHorizontal}], First@lineStyles], {}], 
   If[lineDensityVertical != 0, 
    Style[Table[
      Line[transform /@ {{k - 100 tanVertical + First@offset, -100 + 
           Last@offset}, {k + 100 tanVertical + First@offset, 
          100 + Last@offset}}], {k, -100.5, 100.5, 
       1/lineDensityVertical}], Last@lineStyles], {}]};
ResourceFunction[
   "WolframModel"][{{x, y}, {z, y}} -> {{x, z}, {y, z}, {w, z}}, {{0, 
    0}, {0, 0}}, 15]["LayeredCausalGraph", AspectRatio -> 1/2, 
 Epilog -> 
  foliationLines[{0, 1/3}, {0, 0}, {2.1, 
    0}, {Directive[Red, Opacity[0.5]], 
    Directive[Dotted, Opacity[0.7], Red]}]]

OK, so why do we think these fluxes of edges correspond to energy and momentum? Imagine what happens if we change our foliation, say tipping it to correspond to motion at some velocity, as we did in the previous section. It takes a little bit of math, but what we find out is that our fluxes of causal edges transform with velocity basically just like we saw distance and time transform in the previous section.

In the standard derivation of relativistic mechanics, there’s a consistency argument that energy has to transform with velocity like time does, and momentum like distance. But now we actually have a structural reason for this to be the case. It’s a fundamental consequence of our whole setup, and of causal invariance. In traditional physics, one often says that position is the conjugate variable to momentum, and energy to time. And that’s something that’s burnt into the mathematical structure of the theory. But here it’s not something we’re burning in; it’s something we’re deriving from the underlying structure of our model.

And that means there’s ultimately a lot more we can say about it. For example, we might wonder what the “zero of energy” is. After all, if we look at one of our causal graphs, a lot of the causal edges are really just going into “maintaining the structure of space”. So if in a sense space is uniform, there’s inevitably a uniform “background flux” of causal edges associated with that. And whatever we consider to be “energy” corresponds to the fluctuations of that flux around its background value.

By the way, it’s worth mentioning what a “flux of causal edges” corresponds to. Each causal edge represents a causal connection between events, that is in a sense “carried” by some element in the underlying hypergraph (the “spatial hypergraph”). So a “flux of causal edges” is in effect the communication of activity (i.e. events), either in time (i.e. through spacelike hypersurfaces) or in space (i.e. through timelike hypersurfaces). And at least in some approximation we can then say that energy is associated with activity in the hypergraph that propagates information through time, while momentum is associated with activity that propagates information in space.

There’s a fundamental feature of our causal graphs that we haven’t mentioned yet—that’s related to information propagation. Start at any point (i.e. any event) in a causal graph. Then trace the causal connections from that event. You’ll get some kind of cone (here just in 2D):

CloudGet
&#10005

CloudGet["https://wolfr.am/KVl97Tf4"];(*lorentz*)

foliationLines[{lineDensityHorizontal_ : 1, 
    lineDensityVertical_ : 1}, {tanHorizontal_ : 0.0, 
    tanVertical_ : 0.0}, offset : {_, _} : {0, 0}, 
   lineStyles : {_, _} : {Red, Red}, 
   transform_ : (# &)] := {If[lineDensityHorizontal != 0, 
    Style[Table[
      Line[transform /@ {{-100 + First@offset, 
          k - 100 tanHorizontal + Last@offset}, {100 + First@offset, 
          k + 100 tanHorizontal + Last@offset}}], {k, -100.5, 100.5, 
       1/lineDensityHorizontal}], First@lineStyles], {}], 
   If[lineDensityVertical != 0, 
    Style[Table[
      Line[transform /@ {{k - 100 tanVertical + First@offset, -100 + 
           Last@offset}, {k + 100 tanVertical + First@offset, 
          100 + Last@offset}}], {k, -100.5, 100.5, 
       1/lineDensityVertical}], Last@lineStyles], {}]};
squareCausalGraphPlot[
   layerCount_ : 9, {lineDensityHorizontal_ : 1, 
    lineDensityVertical_ : 1}, {tanHorizontal_ : 0.0, 
    tanVertical_ : 0.0}, offset : {_, _} : {0, 0}, 
   lineStyles : {_, _} : {Red, Red}, transform_ : (# &)] := 
  NeighborhoodGraph[
   DirectedGraph[
    Flatten[Table[{v[{i + 1, j}] -> v[{i, j}], 
       v[{i + 1, j + 1}] -> v[{i, j}]}, {i, layerCount - 1}, {j, 
       1 + Round[-layerCount/2 + i/2], (layerCount + i)/2}]], 
    VertexCoordinates -> 
     Catenate[
      Table[v[{i, j}] -> 
        transform[{2 (#2 - #1/2), #1} & @@ {i, j}], {i, 
        layerCount + 1}, {j, 
        1 + Round[-layerCount/2 + i/2] - 1, (layerCount + i)/2 + 1}]],
     VertexSize -> .33, 
    VertexStyle -> 
     Directive[Directive[Opacity[.7], Hue[0.14, 0.34, 1.]], 
      EdgeForm[Directive[Opacity[0.4], Hue[0.09, 1., 0.91]]]], 
    VertexShapeFunction -> "Rectangle", 
    Epilog -> 
     foliationLines[{lineDensityHorizontal, 
       lineDensityVertical}, {tanHorizontal, tanVertical}, offset, 
      lineStyles, transform]], v[{1, 1}], 9];
With[{graph = 
   squareCausalGraphPlot[
    10, {0, 0}, {0., 0.}, {-0.5, 0}, {Red, Directive[Dotted, Red]}, 
    lorentz[0.]]}, 
 Graph[graph, 
  VertexStyle -> {Directive[
     Directive[Opacity[.7], Hue[0.14, 0.34, 1.]], 
     EdgeForm[Directive[Opacity[0.4], Hue[0.09, 1., 0.91]]]], 
    Alternatives @@ VertexOutComponent[graph, v[{9, 5}]] -> 
     Directive[Directive[Opacity[.6], Hue[0, 0.45, 0.87]], EdgeForm[
Hue[0, 1, 0.48]]]}]]

The cone is more complicated in a more complicated causal graph. But you’ll always have something like it. And what it corresponds to physically is what’s normally called a light cone (or “forward light cone”). Assuming we’ve drawn our causal network so that events are somehow laid out in space across the page, then the light cone will show how information (as transmitted by light) can spread in space with time.

When the causal graph gets complicated, the whole setup with light cones gets complicated, as we’ll discuss for example in connection with black holes later. But for now, we can just say there are cones in our causal graph, and in effect the angle of these cones represents the maximum rate of information propagation in the system, which we can identify with the physical speed of light.

And in fact, not only can we identify light cones in our causal graph: in some sense we can think of our whole causal graph as just being a large number of “elementary light cones” all knitted together. And, as we mentioned, much of the structure that’s built necessarily goes into, in effect, “maintaining the structure of space”.

But let’s look more closely at our light cones. There are causal edges on their boundaries that in effect correspond to propagation at the speed of light—and that, in terms of the underlying hypergraph, correspond to events that “reach out” in the hypergraph, and “entrain” new elements as quickly as possible. But what about causal edges that are “more vertical”? These causal edges are associated with events that in a sense reuse elements in the hypergraph, without involving new ones.

And it looks like these causal edges have an important interpretation: they are associated with mass (or, more specifically, rest mass). OK, so the total flux of causal edges through spacelike hypersurfaces corresponds to energy. And now we’re saying that the flux of causal edges specifically in the timelike direction corresponds to rest mass. We can see what happens if we “tip our reference” frames just a bit, say corresponding to a velocity v  c. Again, there’s a small amount of math, but it’s pretty easy to derive formulas for momentum (p) and energy (E). The speed of light c comes into the formulas because it defines the ratio of “horizontal” (i.e. spacelike) to “vertical” (i.e timelike) distances on the causal graph. And for v small compared to c we get:

So from these formulas we can see that just by thinking about causal graphs (and, yes, with a backdrop of causal invariance, and a whole host of detailed mathematical limit questions that we’re not discussing here), we’ve managed to derive a basic (and famous) fact about the relation between energy and mass:

Sometimes in the standard formalism of physics, this relation by now seems more like a definition than something to derive. But in our model, it’s not just a definition, and in fact we can successfully derive it.

General Relativity & Gravity

Earlier on, we talked about how curvature of space can arise in our models. But at that point we were just talking about “empty space”. Now we can go back and also talk about how curvature interacts with mass and energy in space.

In our earlier discussion, we talked about constructing spherical balls by starting at some point in the hypergraph, and then following all possible sequences of r connections. But now we can do something directly analogous in the causal graph: start at some point, and follow possible sequences of t connections. There’s quite a bit of mathematical trickiness, but essentially this gets us “volumes of light cones”.

If space is effectively d-dimensional, then to a first approximation this volume will grow like . But like in the spatial case, there’s a correction term, this time proportional to the so-called Ricci tensor . (The actual expression is roughly where the are timelike vectors, etc.)

OK, but we also know something else about what is supposed to be inside our light cones: not only are there “background connections” that maintain the structure of space, there are also “additional” causal edges that are associated with energy, momentum and mass. And in the limit of a large causal graph, we can identify the density of these with the so-called energy-momentum tensor . So in the end we have two contributions to the “volumes” of our light cones: one from “pure curvature” and one from energy-momentum.

Again, there’s some math involved. But the main thing is to think about the limit when we’re looking at a very large causal graph. What needs to be true for us to have d-dimensional space, as opposed to something much wilder? This puts a constraint on the growth rates of our light cone volumes, and when one works everything out, it implies that the following equation must hold:

But this is exactly Einstein’s equation for the curvature of space when matter with a certain energy-momentum is present. We’re glossing over lots of details here. But it’s still, in my view, quite spectacular: from the basic structure of our very simple models, we’re able to derive a fundamental result in physics: the equation that for more than a hundred years has passed every test in describing the operation of gravity.

There’s a footnote here. The equation we’ve just given is without a so-called cosmological term. And how that works is bound up with the question of what the zero of energy is, which in our model relates to what features of the evolving hypergraph just have to do with the “maintenance of space”, and what have to do with “things in space” (like matter).

In existing physics, there’s an expectation that even in the “vacuum” there’s actually a formally infinite density of pairs of virtual particles associated with quantum mechanics. Essentially what’s happening is that there are always pairs of particles and antiparticles being created, that annihilate quickly, but that in aggregate contribute a huge effective energy density. We’ll discuss how this relates to quantum mechanics in our models later. But for now let’s just recall that particles (like electrons) in our models basically correspond to locally stable structures in the hypergraph.

But when we think about how “space is maintained” it’s basically through all sorts of seemingly random updating events in the hypergraph. But in existing physics (or, specifically, quantum field theory) we’re basically expected to analyze everything in terms of (virtual) particles. So if we try to do that with all these random updating events, it’s not surprising that we end up saying that there are these infinite collections of things going on. (Yes, this can be made much more precise; I’m just giving an outline here.)

But as soon as we say this, there is an immediate problem: we’re saying that there’s a formally infinite—or at least huge—energy density that must exist everywhere in the universe. But if we then apply Einstein’s equation, we’ll conclude that this must produce enough curvature to basically curl the universe up into a tiny ball.

One way to get out of this is to introduce a so-called cosmological term, that’s just an extra term in the Einstein equations, and then posit that this term is sized so as to exactly cancel (yes, to perhaps one part in 1060 or more) the energy density from virtual particles. It’s certainly not a pretty solution.

But in our models, the situation is quite different. It’s not that we have virtual particles “in space”, that are having an effect on space. It’s that the same stuff that corresponds to the virtual particles is actually “making the space”, and maintaining its structure. Of course, there are lots of details about this—which no doubt depend on the particular underlying rule. But the point is that there’s no longer a huge mystery about why “vacuum energy” doesn’t basically destroy our universe: in effect, it’s because it’s what’s making our universe.

Black Holes, Singularities, etc.

One of the big predictions of general relativity is the existence of black holes. So how do things like that work in our models? Actually, it’s rather straightforward. The defining feature of a black hole is the existence of an event horizon: a boundary that light signals can’t cross, and where in effect causal connection is broken.

In our models, we can explicitly see that happen in the causal graph. Here’s an example:

ResourceFunction
&#10005

ResourceFunction[
   "WolframModel"][{{0, 1}, {0, 2}, {0, 3}} -> {{1, 2}, {3, 2}, {3, 
     4}, {4, 3}, {4, 4}}, {{0, 0}, {0, 0}, {0, 0}}, 20, 
  "CausalGraph"] // LayeredGraphPlot

At the beginning, everything is causally connected. But at some point the causal graph splits—and there’s an event horizon. Events happening on one side can’t influence ones on the other, and so on. And that’s how a region of the universe can “causally break off” to form something like a black hole.

But actually, in our models, the “breaking off” can be even more extreme. Not only can the causal graph split; the spatial hypergraph can actually throw off disconnected pieces—each of which in effect forms a whole “separate universe”:

Framed
&#10005

Framed[ResourceFunction["WolframModelPlot"][#, 
    ImageSize -> {UpTo[100], UpTo[60]}], FrameStyle -> LightGray] & /@ 
 ResourceFunction[
   "WolframModel"][{{1, 2, 3}, {4, 5, 3}} -> {{2, 6, 4}, {6, 1, 
     2}, {4, 2, 1}}, {{0, 0, 0}, {0, 0, 0}}, 20, "StatesList"]

By the way, it’s interesting to look at what happens to the foliations observers make when there’s an event horizon. Causal invariance says that paths in the causal graph that diverge should always eventually merge. But if the paths go into different disconnected pieces of the causal graph, that can’t ever happen. So how does an observer deal with that? Well, basically they have to “freeze time”. They have to have a foliation where successive time slices just pile up, and never enter the disconnected pieces.

It’s just like what happens in general relativity. To an observer far from the black hole, it’ll seem to take an infinite time for anything to fall into the black hole. For now, this is just a phenomenon associated with the structure of space. But later we’ll see that it’s also the direct analog of something completely different: the process of measurement in quantum mechanics.

Coming back to gravity: we can ask questions not only about event horizons, but also about actual singularities in spacetime. In our models, these are places where lots of paths in a causal graph converge to a single point. And in our models, we can immediately study questions like whether there’s always an event horizon associated with any singularity (the “cosmic censorship hypothesis”).

We can ask about other strange phenomena from general relativity. For example, there are closed timelike curves, sometimes viewed as allowing time travel. In our models, closed timelike curves are inconsistent with causal invariance. But we can certainly invent rules that produce them. Here’s an example:

Graph
&#10005

Graph[ResourceFunction["MultiwaySystem"][{"AB" -> "BAB", 
   "BA" -> "A"}, "ABA", 4, "StatesGraph"], 
 GraphLayout -> {"LayeredDigraphEmbedding", "RootVertex" -> "ABA"}]

We start from one “initial” state in this multiway system. But as we go forward we can enter a loop where we repeatedly visit the same state. And this loop also occurs in the causal graph. We think we’re “going forward in time”. But actually we’re just in a loop, repeatedly returning to the same state. And if we tried to make a foliation where we could describe time as always advancing, we just wouldn’t be able to do it.

Cosmology

In our model, the universe can start as a tiny hypergraph—perhaps a single self-loop. But then—as the rule gets applied—it progressively expands. With some particularly simple rules, the total size of the hypergraph has to just uniformly increase; with others it can fluctuate.

But even if the size of the hypergraph is always increasing, that doesn’t mean we’d necessarily notice.