Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save renatoppl/72ee85d212d08ad9670977cc8ffa2afa to your computer and use it in GitHub Desktop.
Save renatoppl/72ee85d212d08ad9670977cc8ffa2afa to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Supplement to \"Interactive Communication in Bilateral Trade\"",
"provenance": [],
"collapsed_sections": [
"xx4BLM_GdZTq"
]
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "-j3rHt6OXmKV"
},
"source": [
"## Supplement to \"Interactive Communication in Bilateral Trade\"\n",
"\n",
"This iPython notebook contains the implementation of a procedure to compute\n",
"the communication protocol in equilibrium given any game where both\n",
"agents have only two possible types (but any number of action). All the computation is **exact**: it uses rational numbers (so that there is no floating point precision) and there is no discretization. Instead the code explicitly computes the breaking points.\n",
"\n",
"Given the description of a base game (i.e. the utilities of Sally and Bob\n",
"for each combination of types and actions) we compute a representation of\n",
"the payoffs $\\pi_B^t(p,q)$ and $\\pi_S^t(p,q)$, i.e., the payoffs after $t$\n",
"rounds of communication when the probability of Bob has probability $p$\n",
"of having type $1$ and Sally has probability $q$ of having type $1$. The\n",
"functions $\\pi_B^t(p,q)$ and $\\pi_S^t(p,q)$ are piecewise bilinear. Given two\n",
"partitions $\\mathcal{I}_B$ and $\\mathcal{I}_S$ of the $[0,1]$ interval in\n",
"subintervals, we will represent for each intervals $I_B \\in \\mathcal{I}_B$\n",
"and $I_S \\in \\mathcal{I}_S$ the functions $\\pi_B^t, \\pi_S^t$ as a bilinear forms:\n",
"$$ \\pi_B^t(p,q) = \\langle[b_0, b_1, b_2, b_3], [1, p, q, pq]\\rangle $$\n",
"$$ \\pi_S^t(p,q) = \\langle[s_0, s_1, s_2, s_3], [1, p, q, pq]\\rangle $$\n",
"for every $(p,q) \\in I_B \\times I_S$.\n",
"\n",
"The first step, we import the python libraries we will use:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "T6g1Z2pR8NZd"
},
"source": [
"# Importing Libraries\n",
"import math\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from fractions import Fraction\n",
"import functools"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "nKIhRbQ3kmQX"
},
"source": [
"### Game Definition\n",
"\n",
"Next we define the base game. We use the *Spy Game* in Section 5 of the paper.\n",
"We specify `A` as the number of Sally's strategies then `U[s][b][a]` containing\n",
"a tuple `(uS, uB)` representing the Sally and Bob's utilities.\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "gBOb6op0B6vq"
},
"source": [
"# The game is defined as U[s][b][a] where s,b \\in {0,1} are Sally and Bob's\n",
"# types and a is Sally's action. There can be more than two actions, but\n",
"# we are constraining the types to be binary.\n",
"# Each element U[s][b][a] is a pair (Sally's utility, Bob's utility).\n",
"# The utility numbers are rational.\n",
"\n",
"A = 2; # A = number of Sally's actions\n",
"\n",
"U = [];\n",
"for s in range(2):\n",
" U.append([]);\n",
" for b in range(2):\n",
" U[s].append([]);\n",
" # Cooperate\n",
" if (s==b):\n",
" U[s][b].append((Fraction(1,1), Fraction(1,1)));\n",
" else:\n",
" U[s][b].append((Fraction(-2,1), Fraction(2,1)));\n",
" \n",
" # Expose\n",
" if (s==b):\n",
" U[s][b].append((Fraction(-1,1), Fraction(-1,1)));\n",
" else:\n",
" U[s][b].append((Fraction(2,1), Fraction(-2,1)));\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Nv3SnsnFlpRr"
},
"source": [
"### Auxiliary Functions\n",
"\n",
"We define a set of auxiliary functions."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C7RFkg4XdKtY"
},
"source": [
"#### Intervals\n",
"\n",
"The first set of functions provide utilities to deal with intervals of type $[a,b]$, $[a,b)$, $(a,b]$ and $(a,b)$\n",
"and $\\emptyset$. Each interval is represented as a tuple `[I0, I1, I2, I3]` wher\n",
"I1 and I2 are the endpoints $a$ and $b$ and I0 and I3 are either 0 or 1 to\n",
"represent whether the interval is open or closed at that endpoint:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "xvrvxHYjSPwq"
},
"source": [
"# Representation of an empty interval\n",
"emptyInterval = [0, math.inf, -math.inf, 0];\n",
"\n",
"# Constructor of an interval.\n",
"# a should be either '[' or '('\n",
"# b and c should be rational numbes such that b <= c.\n",
"# If b > c we return the empty interval.\n",
"# d should be either ']' or ')'\n",
"def Interval(a,b,c,d):\n",
" I = [a,b,c,d];\n",
" if I[0] == '(':\n",
" I[0] = 0;\n",
" else:\n",
" I[0] = 1;\n",
" if I[3] == ')':\n",
" I[3] = 0;\n",
" else:\n",
" I[3] = 1;\n",
" if (EmptyInterval(I)):\n",
" I = emptyInterval;\n",
" return I;\n",
"\n",
"# Converts an interval to a string.\n",
"def IntervalString(I):\n",
" if EmptyInterval(I):\n",
" return '()';\n",
" else:\n",
" return ('(', '[')[I[0]] + str(I[1]) + \",\" + str(I[2]) + (')', ']')[I[3]];\n",
"\n",
"# Converts a list of intervals to a string\n",
"def IntervalVectorString(L):\n",
" return str([IntervalString(I) for I in L]);\n",
"\n",
"# Returns true if x is in the interval I.\n",
"def InInterval(I,x):\n",
" inside = True;\n",
" if (I[0] == 1):\n",
" inside = inside and (I[1] <= x);\n",
" else:\n",
" inside = inside and (I[1] < x);\n",
" if (I[3] == 1):\n",
" inside = inside and (x <= I[2]);\n",
" else:\n",
" inside = inside and (x < I[2]);\n",
" return inside;\n",
"\n",
"# Returns the intersection of two intervals\n",
"def Intersection(I1, I2):\n",
" Iu = [None, None, None, None];\n",
" Iu[1] = max(I1[1], I2[1]);\n",
" if I1[1] > I2[1]:\n",
" Iu[0] = I1[0];\n",
" elif I1[1] < I2[1]:\n",
" Iu[0] = I2[0];\n",
" else:\n",
" Iu[0] = min(I1[0], I2[0]);\n",
" \n",
" Iu[2] = min(I1[2], I2[2]);\n",
" if I1[2] < I2[2]:\n",
" Iu[3] = I1[3];\n",
" elif I1[2] > I2[2]:\n",
" Iu[3] = I2[3];\n",
" else:\n",
" Iu[3] = min(I1[3], I2[3]);\n",
" \n",
" if (Iu[1] == Iu[2]):\n",
" Iu[0] = min(Iu[0], Iu[3])\n",
" Iu[3] = min(Iu[0], Iu[3])\n",
" if (EmptyInterval(Iu)):\n",
" Iu = emptyInterval;\n",
" return Iu;\n",
"\n",
"# Checks whether the interval I is empty.\n",
"def EmptyInterval(I) :\n",
" return I[1] > I[2] or (I[1] == I[2] and (I[0] == 0 or I[3] == 0))\n",
"\n",
"\n",
"# If the union of I1 and I2 is an interval itself, returns the union.\n",
"def Union(I1, I2):\n",
" Iu = [None, None, None, None];\n",
" Iu[1] = min(I1[1], I2[1]);\n",
" if I1[1] < I2[1]:\n",
" Iu[0] = I1[0];\n",
" elif I1[1] > I2[1]:\n",
" Iu[0] = I2[0];\n",
" else:\n",
" Iu[0] = max(I1[0], I2[0]);\n",
" \n",
" Iu[2] = max(I1[2], I2[2]);\n",
" if I1[2] > I2[2]:\n",
" Iu[3] = I1[3];\n",
" elif I1[2] < I2[2]:\n",
" Iu[3] = I2[3];\n",
" else:\n",
" Iu[3] = max(I1[3], I2[3]);\n",
"\n",
" if (EmptyInterval(Iu)):\n",
" Iu = emptyInterval;\n",
" return Iu;\n",
"\n",
"# If the intervals are disjoint, returns a negative number if I1 < I2\n",
"# and a positive number otherwise.\n",
"def IntervalCompare(I1, I2):\n",
" if (I1[1] != I2[1]):\n",
" return I1[1] - I2[1];\n",
" elif I1[0] == 0:\n",
" return 1;\n",
" else:\n",
" return -1;\n",
"\n",
"# Sorts the intervals\n",
"def SortIntervals(L):\n",
" return sorted(L, key = functools.cmp_to_key(IntervalCompare));\n",
"\n",
"# Given two lists of intervals that are a partition (disjoint union) of\n",
"# the same interval, returns a partition of the same interval that is\n",
"# the coarsest refinement of both partitions. Example: given\n",
"# L1 = [1,1/2), [1/2, 1]\n",
"# L2 = [1, 1/3], (1/3, 1]\n",
"# it returns [1, 1/3], (1/3, 1/2), [1/2, 1]\n",
"def MixIntervals(L1, L2):\n",
" MI = [];\n",
" for I1 in L1:\n",
" for I2 in L2:\n",
" I = Intersection(I1, I2);\n",
" if not EmptyInterval(I):\n",
" MI.append(I);\n",
"\n",
" return SortIntervals(MI);"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "G0JClSQ2bvsS"
},
"source": [
"#### Bilinear forms\n",
"\n",
"The next set of functions deals with bilinear forms. Given a product of intervals $I_1 \\times I_2$ we will represent each of the player's utilities for\n",
"$(p,q) \\in I_1 \\times I_2$ as a bilinear form of the type: $b_0 + b_1 p + b_2 q + b_3 pq$. A bilinear form $b$ is represented by a vector `[b0, b1, b2, b3]`."
]
},
{
"cell_type": "code",
"metadata": {
"id": "UPAJqXJnlosX"
},
"source": [
"# Converts a bilinear form b0 + b1 p + b2 q + b3 pq\n",
"# into a linear form in q given p0 as: (b0 + b1 p0) + (b2 + b3 p0) q\n",
"def FQ(b, p0):\n",
" return [b[0] + b[1]*p0, b[2] + b[3]*p0];\n",
"\n",
"# Converts a bilinear form b0 + b1 p + b2 q + b3 pq\n",
"# into a linear form in p given q0\n",
"def FP(b, q0):\n",
" return [b[0] + b[2]*q0, b[1] + b[3]*q0];\n",
"\n",
"def FormToString(F):\n",
" return \"[\" + str(F[0]) + \"+\" + str(F[1]) + \"p+\" + str(F[2]) + \"q+\"+ str(F[3]) + \"pq]\"\n",
"\n",
"# Given linear functions f0(q) and f1(q) finds the bilinear\n",
"# form b(p,q) = b0 + b1 p + b2 q + b3 pq such that\n",
"# b(p0, q) = f0(q) and b(p1, q) = f1(q)\n",
"# We assume p0 != p1.\n",
"def BQ(f0, p0, f1, p1):\n",
" if (p0 != p1):\n",
" return [( p0 * f1[0] - p1 * f0[0] ) / (p0 - p1),\n",
" ( f0[0] - f1[0] ) / (p0 - p1),\n",
" ( p0 * f1[1] - p1 * f0[1] ) / (p0 - p1),\n",
" ( f0[1] - f1[1] ) / (p0 - p1)];\n",
" else:\n",
" # Do we need an assert here ? We should check that the form\n",
" # is equal in the q range we are right now.\n",
" #assert(f0[0]==f1[0] and f0[1]==f1[1])\n",
" return [f0[0], Fraction(0,1), f0[1], Fraction(0,1)];\n",
"\n",
"# Given linear forms f0(q) on p0 and f1(q) on p1, finds\n",
"# f(q) on p by a biliear interpolation.\n",
"def CombineForms(p0, f0, p1, f1, p):\n",
" assert p0 <= p and p <= p1;\n",
" x = Fraction(1,2)\n",
" if (p0 != p1):\n",
" x = (p - p0) / (p1 - p0);\n",
" return [ x * f1[k] + (Fraction(1,1)-x) * f0[k] for k in range(2) ];\n",
"\n",
"# Given f0(q) and f1(q) returns the inteval where f0(q) > f1(q)\n",
"def LargerForm(f0, f1):\n",
" a0 = f0[0];\n",
" b0 = f0[1];\n",
" a1 = f1[0];\n",
" b1 = f1[1];\n",
" if (b1 > b0):\n",
" return Interval('(', -math.inf, (a0-a1)/(b1-b0), ')');\n",
" elif (b1 < b0):\n",
" return Interval('(', (a1-a0)/(b0-b1), math.inf, ')');\n",
" elif (b1 == b0):\n",
" if (a0 > a1):\n",
" return Interval('(', -math.inf, math.inf, ')');\n",
" else:\n",
" return Interval('(', math.inf, -math.inf, ')');\n",
"\n",
"# Given f0(q) and f1(q) returns the inteval where f0(q) == f1(q)\n",
"def EqualForm(f0, f1):\n",
" a0 = f0[0];\n",
" b0 = f0[1];\n",
" a1 = f1[0];\n",
" b1 = f1[1];\n",
" if (b1 != b0):\n",
" return Interval('[', (a0-a1)/(b1-b0), (a0-a1)/(b1-b0), ']');\n",
" else:\n",
" if (a0 == a1):\n",
" return Interval('(', -math.inf, math.inf, ')');\n",
" else:\n",
" return Interval('(', math.inf, -math.inf, ')');\n",
"\n",
"# Given f0(q) and f1(q) returns the inteval where f0(q) >= f1(q)\n",
"def LargerEqualForm(f0, f1):\n",
" return Union(LargerForm(f0, f1), EqualForm(f0, f1));\n",
"\n",
"# Returns the interval [-inf,inf] if i0 > i1 and returns\n",
"# the empty interval otherwise.\n",
"def LargerIndex(i0, i1):\n",
" if i0 > i1:\n",
" return Interval('(', -math.inf, math.inf, ')');\n",
" else:\n",
" return Interval('(', math.inf, -math.inf, ')');\n",
"\n",
"# Returns the interval [-inf,inf] if i0 == i1 and returns\n",
"# the empty interval otherwise.\n",
"def EqualIndex(i0, i1):\n",
" if i0 == i1:\n",
" return Interval('(', -math.inf, math.inf, ')');\n",
" else:\n",
" return Interval('(', math.inf, -math.inf, ')');\n",
"\n",
"# Given a bilinear form F(p,q) = a + bp + cq + dpq\n",
"# return the representation of F(1-p, 1-q).\n",
"def SymmetricForm(F):\n",
" return [sum(F), -F[1]-F[3], -F[2]-F[3], F[3]];\n",
"\n",
"# Evaluates p = p0 in the bilinear form. Returns a bilinear form that\n",
"# doesn't depend on q\n",
"def EvalP(F, p0):\n",
" return [F[0] + F[1] * p0, 0, F[2] + F[3] * p0, 0]\n",
"\n",
"# Evaluates q = q0 in the bilinear form. Returns a bilinear form that\n",
"# doesn't depend on p\n",
"def EvalQ(F, q0):\n",
" return [F[0] + F[2] * q0, F[1] + F[3] * q0, 0, 0]\n",
"\n",
"# Checks whether two bilinear forms are different\n",
"def DifferentForms(B1, B2):\n",
" for i in range(4):\n",
" if (B1[i] != B2[i]):\n",
" return True;\n",
" return False;\n",
"\n",
"# Checks whether two pairs of bilinear forms are different\n",
"def DifferentFormPairs(F1, F2):\n",
" if DifferentForms(F1[0], F2[0]) == True:\n",
" return True;\n",
" return DifferentForms(F1[1], F2[1]);"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "xx4BLM_GdZTq"
},
"source": [
"### Payoff Data Structure\n",
"\n",
"We now describe the data structure used to represent the payoffs in each period. For each period $t$ we will have a data structure `r = [ps, qs, u]` to represent the payoffs:\n",
"\n",
"\n",
"* `ps` is a list of $n$ intervals that is a partition of $[0,1]$\n",
"* `qs` is a list of $m$ intervals that is a partition of $[0,1]$\n",
"* `u` is an $n \\times m$ matrix where `u[i][j]` represents the utilities of Sally and Bob for $(p,q) \\in \\textsf{ps}[i] \\times \\textsf{ps}[j]$.\n",
"\n",
"Each element `u[i][j]` is a tuple `(bS, bB)` and each element is a bilinear form representing functions $\\textsf{bS}(p,q)$ and $\\textsf{bB}(p,q)$ which are the utilities of Sally and Bob in the rectangle $\\textsf{ps}[i] \\times \\textsf{ps}[j]$.\n",
"\n",
"Next we present some auxiliary methods to work with this data structure:\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "NUEuc_X5dBpu"
},
"source": [
"# Transpose a bilinear from (i.e. reverse the roles of p and q)\n",
"def TransposeForm(B):\n",
" return [B[0], B[2], B[1], B[3]]\n",
"\n",
"# Transpose a pair, i.e. reverse the role of Sally and Bob\n",
"def TransposePair(P):\n",
" return [TransposeForm(P[1]), TransposeForm(P[0])];\n",
"\n",
"# Transpose r = [ps, qs, u] by revesing Sally and Bob (and p and q).\n",
"def Transpose(r):\n",
" ps = r[0]\n",
" qs = r[1]\n",
" u = r[2]\n",
" n = len(ps);\n",
" m = len(qs);\n",
" uT = [];\n",
" for j in range(m):\n",
" uT.append([]);\n",
" for i in range(n):\n",
" uT[j].append(TransposePair(u[i][j]));\n",
" return [qs, ps, uT];"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "X4vCfyoSRNnX"
},
"source": [
"# Print a representation of the data-structure r\n",
"def PrintIteration(r):\n",
" ps = r[0]\n",
" qs = r[1]\n",
" u = r[2]\n",
"\n",
" print(\"ps = \" + str([IntervalString(I) for I in ps]))\n",
" print(\"qs = \" + str([IntervalString(I) for I in qs]))\n",
" n = len(ps)\n",
" m = len(qs)\n",
" for i in range(n):\n",
" print([ \"S:\" + FormToString(u[i][j][0]) + \", B:\" + FormToString(u[i][j][0]) for j in range(m) ])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "1eV8CDQoZej8"
},
"source": [
"### Utilities for plotting the results"
]
},
{
"cell_type": "code",
"metadata": {
"id": "ffWY4QQSZTRc"
},
"source": [
"# Plot a representation of the data-structure r\n",
"def PlotRegions(r, color= \"r\"):\n",
" ps = r[0];\n",
" qs = r[1];\n",
" u = r[2];\n",
"\n",
" fig = plt.figure(figsize=(14, 7))\n",
" ax = fig.add_subplot(1,1,1)\n",
" ax.set_aspect('equal')\n",
"\n",
" ax.plot([0,0,1,1,0], [0,1,1,0,0], \"r-\", ms=4)\n",
" n = len(ps);\n",
" m = len(qs);\n",
" for i in range(1,n):\n",
" for j in range(m):\n",
" if DifferentFormPairs(u[i][j], u[i-1][j]):\n",
" ax.plot([ps[i][1], ps[i][1]], [qs[j][1], qs[j][2]], color +\"-\", ms=4)\n",
" for j in range(1,m):\n",
" for i in range(n):\n",
" if DifferentFormPairs(u[i][j], u[i][j-1]):\n",
" ax.plot([ps[i][1], ps[i][2]], [qs[j][1], qs[j][1]], color+ \"-\", ms=4)\n",
" plt.show()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "gUKTLi0TZceG"
},
"source": [
"def Eval(B, p, q):\n",
" return B[0] + p * B[1] + q * B[2] + p * q * B[3];\n",
"\n",
"def EvalU(r, p, q):\n",
" ps = r[0];\n",
" qs = r[1];\n",
" n = len(ps);\n",
" m = len(qs);\n",
" u = r[2];\n",
" j = 0;\n",
" i = 0;\n",
" for j in range(m):\n",
" if InInterval(qs[j], q):\n",
" break\n",
" for i in range(n):\n",
" if InInterval(ps[i], p):\n",
" break\n",
" return [ Eval(u[i][j][0], p, q), Eval(u[i][j][1], p, q) ];\n",
"\n",
"\n",
"def PlotP(r, q, transposed = False, suffix = \"\"):\n",
" ps = r[0];\n",
" qs = r[1];\n",
" n = len(ps);\n",
" m = len(qs);\n",
" u = r[2];\n",
" j = 0;\n",
" for j in range(m):\n",
" if InInterval(qs[j], q):\n",
" break\n",
" pv = [];\n",
" piS = [];\n",
" piB = [];\n",
" for i in range(n):\n",
" pv.append(ps[i][1]);\n",
" pv.append(ps[i][2]);\n",
" piS.append(Eval(u[i][j][0], ps[i][1], q))\n",
" piS.append(Eval(u[i][j][0], ps[i][2], q))\n",
" piB.append(Eval(u[i][j][1], ps[i][1], q))\n",
" piB.append(Eval(u[i][j][1], ps[i][2], q))\n",
"\n",
" plt.plot(pv, piS, label = (\"S\", \"B\")[transposed] + suffix)\n",
" plt.plot(pv, piB, label = (\"B\", \"S\")[transposed] + suffix)\n",
" plt.legend()\n",
" # plt.show()\n",
"\n",
"def PlotQ(r, p, suffix = \"\"):\n",
" T = Transpose(r);\n",
" PlotP(T, p, transposed=True, suffix = suffix)\n",
"\n",
"def PlotU(r, p, q):\n",
" n = len(r);\n",
" Us = [EvalU(r[t], p, q)[0] for t in range(n)]\n",
" plt.plot(range(n), Us, label=\"S\")\n",
" plt.legend();\n",
" #plt.show()\n",
" Ub = [EvalU(r[t], p, q)[1] for t in range(n)]\n",
" plt.plot(range(n), Ub, label=\"B\")\n",
" plt.legend();\n",
" plt.show();\n",
" print(\"Utility Sally = \" + str(Us))\n",
" print(\"Utility Bob = \" + str(Ub))\n",
"\n",
" print(\"Utility Sally = \" + str([float(x) for x in Us]))\n",
" print(\"Utility Bob = \" + str([float(x) for x in Ub]))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "UTBmQayjZxyr"
},
"source": [
"# The following methods can be used to print the result to be\n",
"# exported to latex and displayed using tikz\n",
"def PlotTikz(r, color= \"r\"):\n",
" ps = r[0];\n",
" qs = r[1];\n",
" u = r[2];\n",
"\n",
" n = len(ps);\n",
" m = len(qs);\n",
" for i in range(1,n):\n",
" for j in range(m):\n",
" if DifferentFormPairs(u[i][j], u[i-1][j]):\n",
" print(\"\\draw (%lf,%lf)--(%lf,%lf);\" % (ps[i][1], qs[j][1], ps[i][1], qs[j][2]));\n",
" for j in range(1,m):\n",
" for i in range(n):\n",
" if DifferentFormPairs(u[i][j], u[i][j-1]):\n",
" print(\"\\draw (%lf,%lf)--(%lf,%lf);\" % (ps[i][1], qs[j][1], ps[i][2], qs[j][1]));\n",
" print(\"\\draw (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle;\");\n",
" for i in range(1,n):\n",
" print(\"\\\\node at (%lf, -.08) {$\\\\nicefrac{%d}{%d}$};\" % (ps[i][1], ps[i][1].numerator, ps[i][1].denominator));\n",
" for j in range(1,m):\n",
" print(\"\\\\node at ( -.08,%lf) {$\\\\nicefrac{%d}{%d}$};\" % (qs[j][1], qs[j][1].numerator, qs[j][1].denominator));\n",
"\n",
"\n",
"def PlotPTikz(r, q, transposed = False, suffix = \"\"):\n",
" ps = r[0];\n",
" qs = r[1];\n",
" n = len(ps);\n",
" m = len(qs);\n",
" u = r[2];\n",
" j = 0;\n",
" for j in range(m):\n",
" if InInterval(qs[j], q):\n",
" break\n",
" pv = [];\n",
" piS = [];\n",
" piB = [];\n",
" for i in range(n):\n",
" pv.append(ps[i][1]);\n",
" pv.append(ps[i][2]);\n",
" piS.append(Eval(u[i][j][0], ps[i][1], q))\n",
" piS.append(Eval(u[i][j][0], ps[i][2], q))\n",
" piB.append(Eval(u[i][j][1], ps[i][1], q))\n",
" piB.append(Eval(u[i][j][1], ps[i][2], q))\n",
"\n",
" \n",
" y0 = min(min(piS), min(piB))\n",
" y1 = max(max(piS), max(piB))\n",
" piSp = \"(%lf, %lf)\" % (pv[0], piS[0]);\n",
" piBp = \"(%lf, %lf)\" % (pv[0], piB[0]);\n",
" for i in range(1,2*n):\n",
" piSp += \"--(%lf, %lf)\" % (pv[i], piS[i]);\n",
" piBp += \"--(%lf, %lf)\" % (pv[i], piB[i]);\n",
"\n",
" if (transposed):\n",
" temp = piS;\n",
" piS = piB;\n",
" piB = temp;\n",
" \n",
" print(\"\\draw (0,0) -- (1,0);\")\n",
" print(\"\\draw (0,%lf) -- (0,%lf);\" % (y0, y1))\n",
" print(\"\\draw [line width=1.5pt, color=blue] \" + piBp + \";\" )\n",
" print(\"\\draw [line width=1.5pt, color=red] \" + piSp + \";\" )\n",
" print(\"\\\\node at (.95,.07) {$B$};\")\n",
" print(\"\\\\node at (.95,.5) {$S$};\")"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "udaKM4G6lU86"
},
"source": [
"### Payoff Concavification\n",
"\n",
"First we present a method for converting the game definition from the `U[s][b][a]` data structure to piecewise bilinear representation of the payoffs. The first set of methods is to compare candidates. A candidate is a tuple: `C = [fS, fB, i, j]` where `fS` and `fB` are tuples `[f[0], f[1]]` representing linear functions `f(q) = f[0]+f[1]*p`."
]
},
{
"cell_type": "code",
"metadata": {
"id": "ojUNkSDdP2ON"
},
"source": [
"# Given candidates C0 = [f0, g0, i0, j0] and C1 = [f1, g1, i1, j1]\n",
"# finds the set of values of q such that:\n",
"# f0(q) > f1(q) or\n",
"# (f0(q) == f1(q) and g0(q) > g1(q)) or\n",
"# (f0(q) == f1(q) and f0(q) == f1(q) and i0 > i1) or\n",
"# (f0(q) == f1(q) and f0(q) == f1(q) and i0 == i1 and j0 > j1) or\n",
"def LargerCandidate(C0, C1):\n",
" f0 = C0[0];\n",
" g0 = C0[1];\n",
" i0 = C0[2];\n",
" j0 = C0[3];\n",
" f1 = C1[0];\n",
" g1 = C1[1];\n",
" i1 = C1[2];\n",
" j1 = C1[3];\n",
" I1 = LargerForm(f0, f1);\n",
" E1 = EqualForm(f0, f1);\n",
" I2 = Intersection(E1, LargerForm(g0, g1));\n",
" E2 = Intersection(E1, EqualForm(g0, g1)); \n",
" I3 = Intersection(E2, LargerIndex(i0, i1));\n",
" E3 = Intersection(E2, EqualIndex(i0, i1))\n",
" I4 = Intersection(E3, LargerIndex(j0, j1));\n",
" return Union(Union(Union(I1,I2), I3), I4);\n",
"\n",
"# Given a list of candidates (each a linear function), finds the parameters\n",
"# q \\in I0 such that the i-th candidate in the list is the top candidate\n",
"def TopCandidate(L, i, I0 = Interval('[', Fraction(0,1),Fraction(1,1), ']')):\n",
" I = I0;\n",
" C0 = L[i];\n",
" for j in range(len(L)):\n",
" if j != i:\n",
" C1 = L[j];\n",
" I1 = LargerCandidate(C0, C1);\n",
" I = Intersection(I, I1);\n",
" return I;\n",
"\n",
"# Finds the best candidate in the list for a given interval. If the interval I0\n",
"# doesn't uniquely indentify the best candidate, it returns an error.\n",
"def FindBestCandidate(L, I0):\n",
" found = False;\n",
" C = None;\n",
" for i in range(len(L)):\n",
" I = TopCandidate(L, i, I0);\n",
" if I == I0:\n",
" assert (found == False);\n",
" C = L[i]\n",
" found = True;\n",
" assert (found == True);\n",
" return C;"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "-FPBMP5nlY3M"
},
"source": [
"# Returns a data-structure corresponding to t=0\n",
"\n",
"def ComputeInitialPayoffs():\n",
" # q corresponds to Sally's probability of the high type.\n",
" # The only breakpoints are 0 and 1.\n",
" qs0 = [Interval('[',Fraction(0,1),Fraction(1,1), ']')]\n",
"\n",
" ps0 = [];\n",
" B = [[], []];\n",
" candidates = [[], []];\n",
" for s in range(2):\n",
" for a in range(A):\n",
" fS = [U[s][0][a][0], U[s][1][a][0] - U[s][0][a][0]];\n",
" fB = [U[s][0][a][1], U[s][1][a][1] - U[s][0][a][1]];\n",
" candidates[s].append([fS, fB, a, 0])\n",
" for c in range(len(candidates[s])):\n",
" I = TopCandidate(candidates[s], c);\n",
" if (not EmptyInterval(I)):\n",
" B[s].append(I);\n",
"\n",
" # B[s] constains a partition of [0,1] into intervals where a single action\n",
" # a[s] is optimal for p in that interval. Now we take the intersection of the\n",
" # two partitions to such that for every interval, there is a single optimal\n",
" # action for both s = 0 and s = 1;\n",
" ps0 = MixIntervals(B[0], B[1]);\n",
"\n",
" n = len(ps0);\n",
" u0 = [];\n",
" for i in range(n):\n",
" u0.append([]);\n",
" aS = [0, 0];\n",
" for s in range(2):\n",
" C = FindBestCandidate(candidates[s], ps0[i]);\n",
" aS[s] = C[2];\n",
" # Now that we know the action chosen in that interval, we compute the\n",
" # bilinear form of the payoffs for (p,q) \\in ps0[i] x [0,1]\n",
" fS = [0,0];\n",
" fB = [0,0];\n",
" for s in range(2):\n",
" fS[s] = [U[s][0][aS[s]][0], U[s][1][aS[s]][0] - U[s][0][aS[s]][0]];\n",
" fB[s] = [U[s][0][aS[s]][1], U[s][1][aS[s]][1] - U[s][0][aS[s]][1]];\n",
" BS = fS[0] + [fS[1][0]-fS[0][0], fS[1][1]-fS[0][1]];\n",
" BB = fB[0] + [fB[1][0]-fB[0][0], fB[1][1]-fB[0][1]];\n",
" u0[i].append([BS, BB]);\n",
"\n",
" return [ps0, qs0, u0]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "lI9Clymskcgw"
},
"source": [
"# The input to BuyerConvexHull is a tuple r = [ps, qs, u] where:\n",
"# ps is a list of n+1 numbers in [0,1] as breakpoints in Bob's probability\n",
"# qs is a list of m+1 numbers in [0,1] as breakpoints in Sally's probability\n",
"# u is a n x m matrix such that the entry u[i][j] consists of a pair of\n",
"# bilinear forms (B_S, B_B) such that for p \\in [p[i], p[i+1]] and\n",
"# q \\in [qs[i], qs[i+1]], the utility of Sally and Bob respectively is given\n",
"# by B_S(p,q) and B_B(p,q). Each of the bilinear forms B is a tuple [a,b,c,d]\n",
"# representing the function B(p,q) = a + b * p + c * q + d * p * q\n",
"# The output is a tuple r os the same format with the utilities after a round\n",
"# of best responses by Bob.\n",
"def BuyerConvexHull(r):\n",
" ps = r[0];\n",
" qs = r[1];\n",
" u = r[2];\n",
" n = len(ps);\n",
" m = len(qs);\n",
" u1 = [];\n",
" for _ in range(n):\n",
" u1.append([]);\n",
" qs1 = [];\n",
" for j in range(m):\n",
" qI = qs[j];\n",
" # We build three lists:\n",
" # * pv is a list of endpoints of the intervals in ps. For example, if\n",
" # ps = {[0,a), [a,b], (b,1]}, then pv = [0, a, a, b, b, 1]\n",
" # * sv[i] is the functions f(q) = a + bq representing Sally's payoff\n",
" # at the point pv[i]. In the example above, sv[0] represents her payoff\n",
" # at 0, sv[1] at a-eps (since it came from interval [0,a) then sv[2]\n",
" # is her payoff at a and so on...\n",
" # * bv[i] = same but for Bob\n",
" pv = [];\n",
" sv = [];\n",
" bv = [];\n",
" for i in range(n):\n",
" for k in [1,2]:\n",
" pv.append( ps[i][k] )\n",
" sv.append( FQ(u[i][j][0], ps[i][k]) )\n",
" bv.append( FQ(u[i][j][1], ps[i][k]) )\n",
" # Now we break the interval qs[j] such that within each subinterval the\n",
" # convex hull has the same shape.\n",
" SubIntervals = [qI];\n",
" candidates = [[]];\n",
" for i in range(1,2*n-1):\n",
" Breakpoints = [];\n",
" candidates.append([]);\n",
" for i0 in range(i):\n",
" for i1 in range(i,2*n):\n",
" candidates[i].append([CombineForms(pv[i0], bv[i0], pv[i1], bv[i1], pv[i]),\n",
" CombineForms(pv[i0], sv[i0], pv[i1], sv[i1], pv[i]),\n",
" i0, i1]);\n",
" for c in range(len(candidates[i])):\n",
" I = TopCandidate(candidates[i], c, qI);\n",
" if (not EmptyInterval(I)):\n",
" Breakpoints.append(I);\n",
" SubIntervals = MixIntervals(Breakpoints, SubIntervals);\n",
" # Now within each subinterval of qI such that the convex hull has the\n",
" # same shape, we construct the convex hull. The lists sv1 and bv1 will\n",
" # contain the payoffs of Sally and Bob after being concavified in Bob's\n",
" # dimension. Note that Bob's payoff will be concavified and Sally's payoff\n",
" # will only break the ties.\n",
" for j0 in range(len(SubIntervals)):\n",
" qI = SubIntervals[j0];\n",
" qs1.append(qI);\n",
"\n",
" sv1 = [ FQ(u[0][j][0], ps[0][1]) ];\n",
" bv1 = [ FQ(u[0][j][1], ps[0][1]) ];\n",
" for i in range(1,2*n-1):\n",
" C = FindBestCandidate(candidates[i], qI);\n",
" bv1.append(C[0])\n",
" sv1.append(C[1])\n",
" sv1.append( FQ(u[n-1][j][0], ps[n-1][2]) );\n",
" bv1.append( FQ(u[n-1][j][1], ps[n-1][2]) );\n",
"\n",
" # Finally we construct the bilinear forms and append to the output\n",
" for i in range(n):\n",
" u1[i].append([BQ(sv1[2*i], pv[2*i], sv1[2*i+1], pv[2*i+1]),\n",
" BQ(bv1[2*i], pv[2*i], bv1[2*i+1], pv[2*i+1])])\n",
" return [ps, qs1, u1];"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "RGoZJDKji5S6"
},
"source": [
"# To compute Sally's convex hull we transpose the data-structure reversing\n",
"# the roles of Sally and Bob (and p and q), compute the convex hull for Bob\n",
"# and then transpose it again.\n",
"def SellerConvexHull(r):\n",
" rT = Transpose(r);\n",
" rTH = BuyerConvexHull(rT);\n",
" return Transpose(rTH);"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "BgCxSclWkyK7"
},
"source": [
"# Utility for eliminating unnecessary breakpoints. It is not strictly needed\n",
"# but makes the code more efficient since it decreases the size of the data\n",
"def CleanUpP(r):\n",
" ps = r[0];\n",
" qs = r[1];\n",
" u = r[2];\n",
" n = len(ps);\n",
" m = len(qs);\n",
"\n",
" ps0 = [ps[0]];\n",
" u0 = [u[0]];\n",
"\n",
" for i in range(1,n):\n",
" merge_down = True;\n",
" for j in range(m):\n",
" if DifferentFormPairs(u[i][j], u[i-1][j]):\n",
" merge_down = False;\n",
" if merge_down:\n",
" ps0[-1] = Union(ps0[-1], ps[i])\n",
" else:\n",
" ps0.append(ps[i]);\n",
" u0.append(u[i]);\n",
" \n",
" return [ps0, qs, u0];\n",
"\n",
"def CleanUp(r):\n",
" rC = CleanUpP(r);\n",
" rCT = Transpose(r);\n",
" rC = CleanUpP(rCT);\n",
" return Transpose(rC);"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "eFkSxusyoSc7"
},
"source": [
"### Analyze Game"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "b-4loHkSi1VZ",
"outputId": "bb91bfec-eeb9-484a-c660-cbbadffea0a5"
},
"source": [
"print(\"t = 0\")\n",
"r0 = ComputeInitialPayoffs();\n",
"PrintIteration(r0)\n",
"PlotRegions(r0)\n",
"r = [r0];\n",
"for i in range(1,7):\n",
" print(\"t = %d\" % i)\n",
" if i % 2 == 1:\n",
" r.append(BuyerConvexHull(r[i-1]))\n",
" else:\n",
" r.append(SellerConvexHull(r[i-1]))\n",
" PrintIteration(r[i])\n",
" PlotRegions(r[i])\n",
" r[i] = CleanUp(r[i]);"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"t = 0\n",
"ps = ['[0,1/3]', '(1/3,2/3)', '[2/3,1]']\n",
"qs = ['[0,1]']\n",
"['S:[1+-3p+1q+0pq], B:[1+-3p+1q+0pq]']\n",
"['S:[-1+3p+3q+-6pq], B:[-1+3p+3q+-6pq]']\n",
"['S:[-1+3p+-1q+0pq], B:[-1+3p+-1q+0pq]']\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1008x504 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"t = 1\n",
"ps = ['[0,1/3]', '(1/3,2/3)', '[2/3,1]']\n",
"qs = ['[0,4/9]', '(4/9,5/9)', '[5/9,1]']\n",
"['S:[1+-3p+1q+0pq], B:[1+-3p+1q+0pq]', 'S:[1+-3p+1q+0pq], B:[1+-3p+1q+0pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]']\n",
"['S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-1+3p+3q+-6pq], B:[-1+3p+3q+-6pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]']\n",
"['S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-1+3p+-1q+0pq], B:[-1+3p+-1q+0pq]', 'S:[-1+3p+-1q+0pq], B:[-1+3p+-1q+0pq]']\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1008x504 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"t = 2\n",
"ps = ['[0,0]', '(0,1/3]', '(1/3,13/27]', '(13/27,14/27)', '[14/27,2/3)', '[2/3,1)', '[1,1]']\n",
"qs = ['[0,4/9]', '(4/9,5/9)', '[5/9,1]']\n",
"['S:[1+-3p+1q+0pq], B:[1+-3p+1q+0pq]', 'S:[1+-3p+1q+0pq], B:[1+-3p+1q+0pq]', 'S:[1+-3p+1q+0pq], B:[1+-3p+1q+0pq]']\n",
"['S:[1+-3p+1q+12/5pq], B:[1+-3p+1q+12/5pq]', 'S:[1+-3p+1q+12/5pq], B:[1+-3p+1q+12/5pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]']\n",
"['S:[-1+3p+23/5q+-42/5pq], B:[-1+3p+23/5q+-42/5pq]', 'S:[-1+3p+23/5q+-42/5pq], B:[-1+3p+23/5q+-42/5pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]']\n",
"['S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-61/9+15p+15q+-30pq], B:[-61/9+15p+15q+-30pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]']\n",
"['S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-9/5+27/5p+19/5q+-42/5pq], B:[-9/5+27/5p+19/5q+-42/5pq]', 'S:[-9/5+27/5p+19/5q+-42/5pq], B:[-9/5+27/5p+19/5q+-42/5pq]']\n",
"['S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[7/5+3/5p+-17/5q+12/5pq], B:[7/5+3/5p+-17/5q+12/5pq]', 'S:[7/5+3/5p+-17/5q+12/5pq], B:[7/5+3/5p+-17/5q+12/5pq]']\n",
"['S:[-1+3p+-1q+0pq], B:[-1+3p+-1q+0pq]', 'S:[17/3+-11/3p+-13q+12pq], B:[17/3+-11/3p+-13q+12pq]', 'S:[-1+3p+-1q+0pq], B:[-1+3p+-1q+0pq]']\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1008x504 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"t = 3\n",
"ps = ['[0,0]', '(0,1/3]', '(1/3,13/27]', '(13/27,14/27)', '[14/27,2/3)', '[2/3,1)', '[1,1]']\n",
"qs = ['[0,0]', '(0,4/9]', '(4/9,140/297]', '(140/297,40/81]', '(40/81,41/81)', '[41/81,157/297)', '[157/297,5/9)', '[5/9,1)', '[1,1]']\n",
"['S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]']\n",
"['S:[1+-3p+1q+12/5pq], B:[1+-3p+1q+12/5pq]', 'S:[1+-3p+1q+12/5pq], B:[1+-3p+1q+12/5pq]', 'S:[1+-3p+1q+12/5pq], B:[1+-3p+1q+12/5pq]', 'S:[1+-3p+1q+12/5pq], B:[1+-3p+1q+12/5pq]', 'S:[1+-3p+1q+12/5pq], B:[1+-3p+1q+12/5pq]', 'S:[1+-3p+1q+12/5pq], B:[1+-3p+1q+12/5pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[1+6/5p+1q+-21/5pq], B:[1+6/5p+1q+-21/5pq]']\n",
"['S:[-1+3p+16/5q+-21/5pq], B:[-1+3p+16/5q+-21/5pq]', 'S:[-1+3p+23/5q+-42/5pq], B:[-1+3p+23/5q+-42/5pq]', 'S:[-1+3p+23/5q+-42/5pq], B:[-1+3p+23/5q+-42/5pq]', 'S:[-1+3p+23/5q+-42/5pq], B:[-1+3p+23/5q+-42/5pq]', 'S:[-1+3p+23/5q+-42/5pq], B:[-1+3p+23/5q+-42/5pq]', 'S:[-9/5+27/5p+151/25q+-318/25pq], B:[-9/5+27/5p+151/25q+-318/25pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[1/5+12/5p+9/5q+-27/5pq], B:[1/5+12/5p+9/5q+-27/5pq]']\n",
"['S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-77/25+183/25p+167/25q+-318/25pq], B:[-77/25+183/25p+167/25q+-318/25pq]', 'S:[-61/9+15p+15q+-30pq], B:[-61/9+15p+15q+-30pq]', 'S:[-9/5+27/5p+151/25q+-318/25pq], B:[-9/5+27/5p+151/25q+-318/25pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[-27/25+108/25p+77/25q+-183/25pq], B:[-27/25+108/25p+77/25q+-183/25pq]']\n",
"['S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-77/25+183/25p+167/25q+-318/25pq], B:[-77/25+183/25p+167/25q+-318/25pq]', 'S:[-9/5+27/5p+19/5q+-42/5pq], B:[-9/5+27/5p+19/5q+-42/5pq]', 'S:[-9/5+27/5p+19/5q+-42/5pq], B:[-9/5+27/5p+19/5q+-42/5pq]', 'S:[-9/5+27/5p+19/5q+-42/5pq], B:[-9/5+27/5p+19/5q+-42/5pq]', 'S:[-9/5+27/5p+19/5q+-42/5pq], B:[-9/5+27/5p+19/5q+-42/5pq]', 'S:[-9/5+27/5p+19/5q+-42/5pq], B:[-9/5+27/5p+19/5q+-42/5pq]']\n",
"['S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[7/5+3/5p+-17/5q+12/5pq], B:[7/5+3/5p+-17/5q+12/5pq]', 'S:[7/5+3/5p+-17/5q+12/5pq], B:[7/5+3/5p+-17/5q+12/5pq]', 'S:[7/5+3/5p+-17/5q+12/5pq], B:[7/5+3/5p+-17/5q+12/5pq]', 'S:[7/5+3/5p+-17/5q+12/5pq], B:[7/5+3/5p+-17/5q+12/5pq]', 'S:[7/5+3/5p+-17/5q+12/5pq], B:[7/5+3/5p+-17/5q+12/5pq]', 'S:[7/5+3/5p+-17/5q+12/5pq], B:[7/5+3/5p+-17/5q+12/5pq]']\n",
"['S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]']\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1008x504 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"t = 4\n",
"ps = ['[0,0]', '(0,1/3]', '(1/3,724/1557]', '(724/1557,13/27]', '(13/27,2521/5103]', '(2521/5103,4489/8991]', '(4489/8991,4502/8991)', '[4502/8991,2582/5103)', '[2582/5103,14/27)', '[14/27,833/1557)', '[833/1557,2/3)', '[2/3,1)', '[1,1]']\n",
"qs = ['[0,0]', '(0,140/297]', '(140/297,40/81]', '(40/81,41/81)', '[41/81,157/297)', '[157/297,1)', '[1,1]']\n",
"['S:[1+0p+0q+0pq], B:[1+0p+0q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[2+0p+0q+0pq], B:[2+0p+0q+0pq]']\n",
"['S:[1+-3p+0q+0pq], B:[1+-3p+0q+0pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+751/157q+-1362/157pq], B:[-1+3p+751/157q+-1362/157pq]', 'S:[-1+3p+751/157q+-1362/157pq], B:[-1+3p+751/157q+-1362/157pq]', 'S:[-1+3p+751/157q+-1362/157pq], B:[-1+3p+751/157q+-1362/157pq]', 'S:[-1+3p+751/157q+-1362/157pq], B:[-1+3p+751/157q+-1362/157pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+4571/1025q+-8178/1025pq], B:[-1+3p+4571/1025q+-8178/1025pq]', 'S:[-1+3p+4571/1025q+-8178/1025pq], B:[-1+3p+4571/1025q+-8178/1025pq]', 'S:[-1+3p+4571/1025q+-8178/1025pq], B:[-1+3p+4571/1025q+-8178/1025pq]', 'S:[-1823/375+1413/125p+1511/125q+-3048/125pq], B:[-1823/375+1413/125p+1511/125q+-3048/125pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+4571/1025q+-8178/1025pq], B:[-1+3p+4571/1025q+-8178/1025pq]', 'S:[-1+3p+4571/1025q+-8178/1025pq], B:[-1+3p+4571/1025q+-8178/1025pq]', 'S:[-1+3p+4571/1025q+-8178/1025pq], B:[-1+3p+4571/1025q+-8178/1025pq]', 'S:[-1823/375+1413/125p+1511/125q+-3048/125pq], B:[-1823/375+1413/125p+1511/125q+-3048/125pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-74773/4185+5757/155p+29281/775q+-58458/775pq], B:[-74773/4185+5757/155p+29281/775q+-58458/775pq]', 'S:[-74773/4185+5757/155p+29281/775q+-58458/775pq], B:[-74773/4185+5757/155p+29281/775q+-58458/775pq]', 'S:[-1823/375+1413/125p+1511/125q+-3048/125pq], B:[-1823/375+1413/125p+1511/125q+-3048/125pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-439/75+327/25p+1537/125q+-3048/125pq], B:[-439/75+327/25p+1537/125q+-3048/125pq]', 'S:[-83677/2025+2103/25p+2103/25q+-4206/25pq], B:[-83677/2025+2103/25p+2103/25q+-4206/25pq]', 'S:[-1823/375+1413/125p+1511/125q+-3048/125pq], B:[-1823/375+1413/125p+1511/125q+-3048/125pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-439/75+327/25p+1537/125q+-3048/125pq], B:[-439/75+327/25p+1537/125q+-3048/125pq]', 'S:[-384449/20925+29673/775p+29177/775q+-58458/775pq], B:[-384449/20925+29673/775p+29177/775q+-58458/775pq]', 'S:[-384449/20925+29673/775p+29177/775q+-58458/775pq], B:[-384449/20925+29673/775p+29177/775q+-58458/775pq]', 'S:[1+0p+1q+-3pq], B:[1+0p+1q+-3pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-439/75+327/25p+1537/125q+-3048/125pq], B:[-439/75+327/25p+1537/125q+-3048/125pq]', 'S:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq], B:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq]', 'S:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq], B:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq]', 'S:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq], B:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-439/75+327/25p+1537/125q+-3048/125pq], B:[-439/75+327/25p+1537/125q+-3048/125pq]', 'S:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq], B:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq]', 'S:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq], B:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq]', 'S:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq], B:[-1557/1025+5103/1025p+3607/1025q+-8178/1025pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[-297/157+891/157p+611/157q+-1362/157pq], B:[-297/157+891/157p+611/157q+-1362/157pq]', 'S:[-297/157+891/157p+611/157q+-1362/157pq], B:[-297/157+891/157p+611/157q+-1362/157pq]', 'S:[-297/157+891/157p+611/157q+-1362/157pq], B:[-297/157+891/157p+611/157q+-1362/157pq]', 'S:[-297/157+891/157p+611/157q+-1362/157pq], B:[-297/157+891/157p+611/157q+-1362/157pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+2q+-3pq], B:[-1+3p+2q+-3pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[-2+3p+0q+0pq], B:[-2+3p+0q+0pq]']\n",
"['S:[2+0p+0q+0pq], B:[2+0p+0q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[1+0p+0q+0pq], B:[1+0p+0q+0pq]']\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1008x504 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"t = 5\n",
"ps = ['[0,0]', '(0,1/3]', '(1/3,724/1557]', '(724/1557,13/27]', '(13/27,2521/5103]', '(2521/5103,4489/8991]', '(4489/8991,4502/8991)', '[4502/8991,2582/5103)', '[2582/5103,14/27)', '[14/27,833/1557)', '[833/1557,2/3)', '[2/3,1)', '[1,1]']\n",
"qs = ['[0,0]', '(0,140/297]', '(140/297,130781/275346]', '(130781/275346,64841/135459]', '(64841/135459,40/81]', '(40/81,41/81)', '[41/81,70618/135459)', '[70618/135459,144565/275346)', '[144565/275346,157/297)', '[157/297,1)', '[1,1]']\n",
"['S:[1+0p+0q+0pq], B:[1+0p+0q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[2+0p+0q+0pq], B:[2+0p+0q+0pq]']\n",
"['S:[1+-3p+0q+0pq], B:[1+-3p+0q+0pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+-3p+1q+420/157pq], B:[1+-3p+1q+420/157pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+751/157q+-1362/157pq], B:[-1+3p+751/157q+-1362/157pq]', 'S:[-1+3p+751/157q+-1362/157pq], B:[-1+3p+751/157q+-1362/157pq]', 'S:[-1+3p+751/157q+-1362/157pq], B:[-1+3p+751/157q+-1362/157pq]', 'S:[-1+3p+751/157q+-1362/157pq], B:[-1+3p+751/157q+-1362/157pq]', 'S:[-1+3p+751/157q+-1362/157pq], B:[-1+3p+751/157q+-1362/157pq]', 'S:[-1+3p+751/157q+-1362/157pq], B:[-1+3p+751/157q+-1362/157pq]', 'S:[-297/157+891/157p+154237/24649q+-322824/24649pq], B:[-297/157+891/157p+154237/24649q+-322824/24649pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq], B:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-297/157+891/157p+154237/24649q+-322824/24649pq], B:[-297/157+891/157p+154237/24649q+-322824/24649pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq], B:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-297/157+891/157p+154237/24649q+-322824/24649pq], B:[-297/157+891/157p+154237/24649q+-322824/24649pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq], B:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-297/157+891/157p+154237/24649q+-322824/24649pq], B:[-297/157+891/157p+154237/24649q+-322824/24649pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq], B:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-297/157+891/157p+154237/24649q+-322824/24649pq], B:[-297/157+891/157p+154237/24649q+-322824/24649pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq], B:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-297/157+891/157p+154237/24649q+-322824/24649pq], B:[-297/157+891/157p+154237/24649q+-322824/24649pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq], B:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-297/157+891/157p+154237/24649q+-322824/24649pq], B:[-297/157+891/157p+154237/24649q+-322824/24649pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq], B:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-259291/56571+1167/109p+1167/109q+-2334/109pq], B:[-259291/56571+1167/109p+1167/109q+-2334/109pq]', 'S:[-297/157+891/157p+154237/24649q+-322824/24649pq], B:[-297/157+891/157p+154237/24649q+-322824/24649pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq], B:[-75329/24649+182937/24649p+168587/24649q+-322824/24649pq]', 'S:[-297/157+891/157p+611/157q+-1362/157pq], B:[-297/157+891/157p+611/157q+-1362/157pq]', 'S:[-297/157+891/157p+611/157q+-1362/157pq], B:[-297/157+891/157p+611/157q+-1362/157pq]', 'S:[-297/157+891/157p+611/157q+-1362/157pq], B:[-297/157+891/157p+611/157q+-1362/157pq]', 'S:[-297/157+891/157p+611/157q+-1362/157pq], B:[-297/157+891/157p+611/157q+-1362/157pq]', 'S:[-297/157+891/157p+611/157q+-1362/157pq], B:[-297/157+891/157p+611/157q+-1362/157pq]', 'S:[-297/157+891/157p+611/157q+-1362/157pq], B:[-297/157+891/157p+611/157q+-1362/157pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[263/157+51/157p+-577/157q+420/157pq], B:[263/157+51/157p+-577/157q+420/157pq]', 'S:[-2+3p+0q+0pq], B:[-2+3p+0q+0pq]']\n",
"['S:[2+0p+0q+0pq], B:[2+0p+0q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[1+0p+0q+0pq], B:[1+0p+0q+0pq]']\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaEAAAGbCAYAAABtSS8JAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAATe0lEQVR4nO3df4jk933f8dfbOp+jYsVXcqcQdBefis+Qwy2xWVSXQKNit8j6Q/dHfiCBSRyEBWkVSm0CKilKUP5yTVMIqHUuxDgxxLLiP8JBLuiPRMIQJKM1doQlo7BVHOsUgza2dXGic85Xf/rHzLmr3b3bkTQ775vR4wHLzHznuzNvfbW3z/1+58tMjTECAB3e1D0AAG9cIgRAGxECoI0IAdBGhABoc6DriQ8fPjyOHz/e9fQALNAXv/jFvxtjHNm+vC1Cx48fz/r6etfTA7BAVfU3uy13OA6ANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0GbPCFXVJ6vqxar6yhXur6r67araqKqnquo98x8TgFU0y57Qp5LcdpX7P5DkxPTrniT/+/WPBcAbwZ4RGmN8Psm3rrLKqSR/MCaeSHKoqn5sXgMCsLrm8XlCNyV5fsvtc9Nl35jDY1/ZsWPJiy8m11+/r0/Dgly4MLlcpv+fV5p5+/LLt5Pk0qXJ5YEDr/y+3R7rO9+ZXN5ww3zmXZRlnZudLlxIbrwxef75vdd9jRZ6YkJV3VNV61W1vrm5+foe7MUXk4sX5zMYXIvGmHwtm2Wdm50uXpz8rt1H89gTeiHJsS23j06X7TDGOJ3kdJKsra29vp/S66+ffL300ut6GLhm3Xrr5PKxxzqnePWWdW52OnRo359iHntCZ5L8wvQsufcmOT/G2N9DcQCshD33hKrqM0luTXK4qs4l+fUkb06SMcYnkpxNcnuSjSQvJ/ml/RoWgNWyZ4TGGHftcf9I8p/mNhEAbxjeMQGANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgzU4Sq6raqeraqNqrqvl3u//GqerSqvlRVT1XV7fMfFYBVs2eEquq6JA8m+UCSk0nuqqqT21b7b0keHmO8O8mdSf7XvAcFYPXMsid0S5KNMcZzY4yLSR5KcmrbOiPJD0+vvy3J385vRABW1SwRuinJ81tun5su2+o3knywqs4lOZvkV3Z7oKq6p6rWq2p9c3PzNYwLwCqZ14kJdyX51BjjaJLbk3y6qnY89hjj9BhjbYyxduTIkTk9NQDLapYIvZDk2JbbR6fLtro7ycNJMsZ4PMkPJTk8jwEBWF2zROjJJCeq6uaqOpjJiQdntq3z9STvS5Kq+olMIuR4GwBXtWeExhiXktyb5JEkX83kLLinq+qBqrpjutpHk3y4qv4yyWeSfGiMMfZraABWw4FZVhpjnM3khIOty+7fcv2ZJD8139EAWHXeMQGANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0GamCFXVbVX1bFVtVNV9V1jn56vqmap6uqr+cL5jArCKDuy1QlVdl+TBJP8+ybkkT1bVmTHGM1vWOZHkvyb5qTHGt6vqxv0aGIDVMcue0C1JNsYYz40xLiZ5KMmpbet8OMmDY4xvJ8kY48X5jgnAKpolQjcleX7L7XPTZVu9M8k7q+ovquqJqrpttweqqnuqar2q1jc3N1/bxACsjHmdmHAgyYkktya5K8nvVtWh7SuNMU6PMdbGGGtHjhyZ01MDsKxmidALSY5tuX10umyrc0nOjDG+N8b46yR/lUmUAOCKZonQk0lOVNXNVXUwyZ1Jzmxb548z2QtKVR3O5PDcc3OcE4AVtGeExhiXktyb5JEkX03y8Bjj6ap6oKrumK72SJJvVtUzSR5N8qtjjG/u19AArIY9T9FOkjHG2SRnty27f8v1keQj0y8AmIl3TACgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQZqaP974mXbjQPQHsr42N7glem2Wdm50W8Ht2eSN08eLk8tZbW8dgTtbXJ5dra71zvBqXf9m+4x1XX771l/JLL00uDx165fft9ljf+EbypiU8WHH5v5Hld+nSvj/F8kaI1fKP/zi5/PKXe+d4Nc6fn1z+wz+8cvl3vvPK5ZdvJ8n3vz+5vHDhld+3/XsurzvG/OaFa9DyRujgwcnlY4+1jsGcvPWtyfe+l/zkT3ZPMrvHH59cbp95XntCjz+evPnN85t3UQ4d6p6AeTmw/4lY3ghdf333BMzT5cNwy/RHxeVDwfs187Ieat5+eJLltYDfs0t4wBmAVSFCALRZ3sNxTtFeLct4Wu9+z7yM2yRZ3rnZaQG/Z+0JAdBmefeEnJiwWpbxxez9nnkZt0myvHOzkxMTAFhlIgRAm+U9HOfEhNWyjC9mOzFhd8s6Nzs5MQGAVba8e0JOTFgty/hithMTdresc7OTExMAWGUiBECb5T0c58SE1bKML2avr0/e+Xv7G43O8120k+V7I9NlffdvdvKhdlexgA9bYoGW8YPQXn558nk/2z8DaV6fJ3T5gxuX6TOWksncFy8uXzzZ6fLP4D5a3ghBt+uum0Rlvz5P6Eqf3Hqtu/wpuTCD5Y3QAj5siQVaxg9C+9EfnVwu02cgwavxlrfs+1Ms729yp2ivlmX7az9Zzpnh1XCKNgCrTIQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANrMFKGquq2qnq2qjaq67yrr/UxVjapam9+IAKyqPSNUVdcleTDJB5KcTHJXVZ3cZb0bkvznJF+Y95AArKZZ9oRuSbIxxnhujHExyUNJTu2y3m8m+ViS785xPgBW2CwRuinJ81tun5su+4Gqek+SY2OMP7naA1XVPVW1XlXrm5ubr3pYAFbL6z4xoarelOS3knx0r3XHGKfHGGtjjLUjR4683qcGYMnNEqEXkhzbcvvodNllNyR5V5LHquprSd6b5IyTEwDYyywRejLJiaq6uaoOJrkzyZnLd44xzo8xDo8xjo8xjid5IskdY4z1fZkYgJWxZ4TGGJeS3JvkkSRfTfLwGOPpqnqgqu7Y7wEBWF0HZllpjHE2ydlty+6/wrq3vv6xAHgj8I4JALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2M0Woqm6rqmeraqOq7tvl/o9U1TNV9VRV/VlVvX3+owKwavaMUFVdl+TBJB9IcjLJXVV1cttqX0qyNsb4V0k+l+S/z3tQAFbPLHtCtyTZGGM8N8a4mOShJKe2rjDGeHSM8fL05hNJjs53TABW0SwRuinJ81tun5suu5K7k/zpbndU1T1VtV5V65ubm7NPCcBKmuuJCVX1wSRrST6+2/1jjNNjjLUxxtqRI0fm+dQALKEDM6zzQpJjW24fnS57hap6f5JfS/LTY4x/ms94AKyyWfaEnkxyoqpurqqDSe5McmbrClX17iS/k+SOMcaL8x8TgFW0Z4TGGJeS3JvkkSRfTfLwGOPpqnqgqu6YrvbxJG9N8kdV9eWqOnOFhwOAH5jlcFzGGGeTnN227P4t198/57kAeAPwjgkAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYzRaiqbquqZ6tqo6ru2+X+t1TVZ6f3f6Gqjs97UABWz54RqqrrkjyY5ANJTia5q6pOblvt7iTfHmO8I8n/TPKxeQ8KwOqZZU/oliQbY4znxhgXkzyU5NS2dU4l+f3p9c8leV9V1fzGBGAVHZhhnZuSPL/l9rkk//pK64wxLlXV+SQ/kuTv5jHkrs6fn1weOrRvT8EC/f3fTy6X6f/nlWa+cGFyef31r7ydJJcuTS4PHPj/9+/2PVdatgyWdW52On8+OXhwX59ioScmVNU9VbVeVeubm5uLfGqudVWTr2WyjDPDq3HwYHLjjfv6FLPsCb2Q5NiW20eny3Zb51xVHUjytiTf3P5AY4zTSU4nydra2ngtA295sNf17QD0m2VP6MkkJ6rq5qo6mOTOJGe2rXMmyS9Or/9skj8fQyUAuLo994Smr/Hcm+SRJNcl+eQY4+mqeiDJ+hjjTJLfS/LpqtpI8q1MQgUAVzXL4biMMc4mObtt2f1brn83yc/NdzQAVp13TACgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtKmuT1yoqs0kf/M6H+Zw9vPTW5eX7bKTbbKTbbKTbbLTvLbJ28cYR7YvbIvQPFTV+hhjrXuOa43tspNtspNtspNtstN+bxOH4wBoI0IAtFn2CJ3uHuAaZbvsZJvsZJvsZJvstK/bZKlfEwJguS37nhAAS0yEAGizFBGqqtuq6tmq2qiq+3a5/y1V9dnp/V+oquOLn3KxZtgmH6mqZ6rqqar6s6p6e8eci7TXNtmy3s9U1aiqN8SpuLNsl6r6+enPy9NV9YeLnnHRZvj38+NV9WhVfWn6b+j2jjkXpao+WVUvVtVXrnB/VdVvT7fXU1X1nrk9+Rjjmv5Kcl2S/5PkXyQ5mOQvk5zcts5/TPKJ6fU7k3y2e+5rYJv8uyT/bHr9l22TH6x3Q5LPJ3kiyVr33NfCdklyIsmXkvzz6e0bu+e+BrbJ6SS/PL1+MsnXuufe523yb5O8J8lXrnD/7Un+NEkleW+SL8zruZdhT+iWJBtjjOfGGBeTPJTk1LZ1TiX5/en1zyV5X1XVAmdctD23yRjj0THGy9ObTyQ5uuAZF22Wn5Mk+c0kH0vy3UUO12iW7fLhJA+OMb6dJGOMFxc846LNsk1Gkh+eXn9bkr9d4HwLN8b4fJJvXWWVU0n+YEw8keRQVf3YPJ57GSJ0U5Lnt9w+N1226zpjjEtJzif5kYVM12OWbbLV3Zn8FbPK9twm00MIx8YYf7LIwZrN8rPyziTvrKq/qKonquq2hU3XY5Zt8htJPlhV55KcTfIrixntmvVqf+fM7MA8HoRrV1V9MMlakp/unqVTVb0pyW8l+VDzKNeiA5kckrs1kz3mz1fVvxxjvNQ6Va+7knxqjPE/qurfJPl0Vb1rjPH97sFWzTLsCb2Q5NiW20eny3Zdp6oOZLL7/M2FTNdjlm2Sqnp/kl9LcscY458WNFuXvbbJDUneleSxqvpaJse1z7wBTk6Y5WflXJIzY4zvjTH+OslfZRKlVTXLNrk7ycNJMsZ4PMkPZfJGnm9UM/3OeS2WIUJPJjlRVTdX1cFMTjw4s22dM0l+cXr9Z5P8+Zi+mrai9twmVfXuJL+TSYBW/Rh/ssc2GWOcH2McHmMcH2Mcz+R1sjvGGOs94y7MLP9+/jiTvaBU1eFMDs89t8ghF2yWbfL1JO9Lkqr6iUwitLnQKa8tZ5L8wvQsufcmOT/G+MY8HviaPxw3xrhUVfcmeSSTs1o+OcZ4uqoeSLI+xjiT5Pcy2V3eyOTFtTv7Jt5/M26Tjyd5a5I/mp6j8fUxxh1tQ++zGbfJG86M2+WRJP+hqp5J8n+T/OoYY2WPJMy4TT6a5Her6r9kcpLCh1b5D9uq+kwmf4gcnr4O9utJ3pwkY4xPZPK62O1JNpK8nOSX5vbcK7xdAbjGLcPhOABWlAgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2/w+x/OFuAaLJPwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 1008x504 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "stream",
"text": [
"t = 6\n",
"ps = ['[0,0]', '(0,1/3]', '(1/3,724/1557]', '(724/1557,13/27]', '(13/27,152888333/313068402]', '(152888333/313068402,2521/5103]', '(2521/5103,4489/8991]', '(4489/8991,4502/8991)', '[4502/8991,2582/5103)', '[2582/5103,160180069/313068402)', '[160180069/313068402,14/27)', '[14/27,833/1557)', '[833/1557,2/3)', '[2/3,1)', '[1,1]']\n",
"qs = ['[0,0]', '(0,130781/275346]', '(130781/275346,64841/135459]', '(64841/135459,70618/135459)', '[70618/135459,144565/275346)', '[144565/275346,1)', '[1,1]']\n",
"['S:[1+0p+0q+0pq], B:[1+0p+0q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[1+0p+1q+0pq], B:[1+0p+1q+0pq]', 'S:[2+0p+0q+0pq], B:[2+0p+0q+0pq]']\n",
"['S:[1+-3p+0q+0pq], B:[1+-3p+0q+0pq]', 'S:[1+-3p+1q+427668/144565pq], B:[1+-3p+1q+427668/144565pq]', 'S:[1+-3p+1q+427668/144565pq], B:[1+-3p+1q+427668/144565pq]', 'S:[1+-3p+1q+427668/144565pq], B:[1+-3p+1q+427668/144565pq]', 'S:[1+-3p+1q+427668/144565pq], B:[1+-3p+1q+427668/144565pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[-1+3p+695257/144565q+-1224408/144565pq], B:[-1+3p+695257/144565q+-1224408/144565pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq], B:[-25901152913/1897684632+199185/6892p+199185/6892q+-199185/3446pq]', 'S:[1+225/833p+1q+-2724/833pq], B:[1+225/833p+1q+-2724/833pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq], B:[-240021/144565+790713/144565p+529151/144565q+-1224408/144565pq]', 'S:[2+-3p+0q+0pq], B:[2+-3p+0q+0pq]']\n",
"['S:[-1+3p+0q+0pq], B:[-1+3p+0q+0pq]', 'S:[-1+3p+1891/833q+-2724/833pq], B:[-1+3p+1891/833q+-2724/833pq]', 'S:[283103/144565+6027/144565p+-572233/144565q+427668/144565pq], B:[283103/144565+6027/144565p+-572233/144565q+427668/144565pq]', 'S:[283103/144565+6027/144565p+-572233/144565q+427668/144565pq], B:[283103/144565+6027/144565p+-572233/144565q+427668/144565pq]', 'S:[283103/144565+6027/144565p+-572233/144565q+427668/144565pq], B:[283103/144565+6027/144565p+-572233/144565q+427668/144565pq]', 'S:[283103/144565+6027/144565p+-572233/144565q+427668/144565pq], B:[283103/144565+6027/144565p+-572233/144565q+427668/144565pq]', 'S:[-2+3p+0q+0pq], B:[-2+3p+0q+0pq]']\n",
"['S:[2+0p+0q+0pq], B:[2+0p+0q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[2+0p+-1q+0pq], B:[2+0p+-1q+0pq]', 'S:[1+0p+0q+0pq], B:[1+0p+0q+0pq]']\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaEAAAGbCAYAAABtSS8JAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAS5UlEQVR4nO3dYYjc933n8c83VuTqqBsdlQzFUiMfUaAiPUhYfDkKVx3JHbIfSA/aKzaENsXE0KvLcQkFHz3c4j7KhetBwXepSkPaQOO4eVAWquIHrU2g1MEbcjWxg8uem0ZyQ7VNYjUQp7Iuv3sw42RvtdJOrNn5akevFywz85+/Z77z80pv/Wf/7NQYIwDQ4S3dAwBw6xIhANqIEABtRAiANiIEQJt9XU986NChcezYsa6nB2CBvvCFL/zDGOPw1u1tETp27FjW1ta6nh6ABaqqv91uu7fjAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtdoxQVX2iqi5W1ZeucX9V1W9X1XpVPV9V75n/mAAso1mOhD6Z5NR17r83yfHp10NJ/teNjwXArWDHCI0xPpfkG9fZ5UySPxgTzyY5WFU/Nq8BAVhe8/g8obuSnN90+8J029fm8NjXdvRocvFicuDArj4NC/Laa5PLvfT/81ozv7F9O1euTC737fv+9Tvu2P6x9uKaJMm3vjW5vOOO3jm4ca+9ltx5Z3L+/M77vkkLPTGhqh6qqrWqWtvY2LixB7t4Mbl8eT6DQYcxJl/LZllf163o8uXJ37W7aB5HQq8kObrp9pHptquMMc4mOZskKysrN/ZdeuDA5OvVV2/oYaDNyZOTy2ee6Zxi/pb1dd2KDh7c9aeYx5HQapKfn54l994kl8YYu/tWHABLYccjoar6dJKTSQ5V1YUkv57krUkyxvh4knNJ7kuynuTbSX5xt4YFYLnsGKExxgM73D+S/PLcJgLgluE3JgDQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1milBVnaqql6pqvaoe2eb+H6+qp6vqi1X1fFXdN/9RAVg2O0aoqm5L8niSe5OcSPJAVZ3Ystt/TfLkGOPdSe5P8j/nPSgAy2eWI6F7kqyPMV4eY1xO8kSSM1v2GUl+ZHr9bUn+bn4jArCsZonQXUnOb7p9Ybpts99I8oGqupDkXJJf2e6BquqhqlqrqrWNjY03MS4Ay2ReJyY8kOSTY4wjSe5L8qmquuqxxxhnxxgrY4yVw4cPz+mpAdirZonQK0mObrp9ZLptsweTPJkkY4y/TPJDSQ7NY0AAltcsEXouyfGquruq9mdy4sHqln2+muR9SVJVP5FJhLzfBsB17RihMcaVJA8neSrJlzM5C+6Fqnqsqk5Pd/tIkg9V1V8l+XSSD44xxm4NDcBy2DfLTmOMc5mccLB526Obrr+Y5KfmOxoAy85vTACgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtJkpQlV1qqpeqqr1qnrkGvv8XFW9WFUvVNUfzndMAJbRvp12qKrbkjye5N8luZDkuapaHWO8uGmf40n+S5KfGmN8s6ru3K2BAVgesxwJ3ZNkfYzx8hjjcpInkpzZss+Hkjw+xvhmkowxLs53TACW0SwRuivJ+U23L0y3bfbOJO+sqr+oqmer6tR2D1RVD1XVWlWtbWxsvLmJAVga8zoxYV+S40lOJnkgye9W1cGtO40xzo4xVsYYK4cPH57TUwOwV80SoVeSHN10+8h022YXkqyOMV4fY/xNkr/OJEoAcE2zROi5JMer6u6q2p/k/iSrW/b540yOglJVhzJ5e+7lOc4JwBLaMUJjjCtJHk7yVJIvJ3lyjPFCVT1WVaenuz2V5OtV9WKSp5P86hjj67s1NADLYcdTtJNkjHEuybkt2x7ddH0k+fD0CwBm4jcmANBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC02dc9wJv2rW8lYyQnT3ZPwjysrU0uV1Z65/hBrK9PLt/xju23v/rq5PLgwe/ft3nbxkby1rfu7owd3nj97H2vvbbrT7F3I/Td73ZPwDwt4Jt94d54TZsjtNmVK8v5ffxGaNn7rlzZ9afYuxHav39y+cwzrWMwJ0eOTC6X6f/nG6/pwoXr379srhVd9p59u5+IvRuhAwe6J2Cetr6ltQx2ek3L+JqT5X1dt6IF/D3rxAQA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQJu9+wtMl/FX/9/KlvEzaHZ6Tcv4mpPlfV23Ip8ndB0L+JwLFmgZP4Pm7/9+8nlBmz+yYfOH2n3ta5PrJ09u/wF51/rQvJvd5tfF3nb58q4/xd6N0AI+54IFWsbPoLn99uT11699/7J+HMmyvq5bUdXkaxft3b/JfaMvl732r/1ZvPFR5cv0QX3cWhbwj0MnJgDQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtZopQVZ2qqpeqar2qHrnOfj9TVaOqVuY3IgDLascIVdVtSR5Pcm+SE0keqKoT2+x3R5L/lOTz8x4SgOU0y5HQPUnWxxgvjzEuJ3kiyZlt9vvNJB9N8p05zgfAEpslQnclOb/p9oXptu+pqvckOTrG+JPrPVBVPVRVa1W1trGx8QMPC8ByueETE6rqLUl+K8lHdtp3jHF2jLEyxlg5fPjwjT41AHvcLBF6JcnRTbePTLe94Y4k70ryTFV9Jcl7k6w6OQGAncwSoeeSHK+qu6tqf5L7k6y+cecY49IY49AY49gY41iSZ5OcHmOs7crEACyNHSM0xriS5OEkTyX5cpInxxgvVNVjVXV6twcEYHntm2WnMca5JOe2bHv0GvuevPGxALgV+I0JALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2M0Woqk5V1UtVtV5Vj2xz/4er6sWqer6q/qyq3j7/UQFYNjtGqKpuS/J4knuTnEjyQFWd2LLbF5OsjDH+ZZLPJvlv8x4UgOUzy5HQPUnWxxgvjzEuJ3kiyZnNO4wxnh5jfHt689kkR+Y7JgDLaJYI3ZXk/KbbF6bbruXBJH+63R1V9VBVrVXV2sbGxuxTArCU5npiQlV9IMlKko9td/8Y4+wYY2WMsXL48OF5PjUAe9C+GfZ5JcnRTbePTLf9f6rq/Ul+LclPjzH+aT7jAbDMZjkSei7J8aq6u6r2J7k/yermHarq3Ul+J8npMcbF+Y8JwDLaMUJjjCtJHk7yVJIvJ3lyjPFCVT1WVaenu30syQ8n+aOq+t9VtXqNhwOA75nl7biMMc4lObdl26Obrr9/znMBcAvwGxMAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1ECIA2IgRAGxECoI0IAdBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaiBAAbUQIgDYiBEAbEQKgjQgB0EaEAGgjQgC0ESEA2ogQAG1milBVnaqql6pqvaoe2eb+26vqM9P7P19Vx+Y9KADLZ8cIVdVtSR5Pcm+SE0keqKoTW3Z7MMk3xxjvSPI/knx03oMCsHxmORK6J8n6GOPlMcblJE8kObNlnzNJfn96/bNJ3ldVNb8xAVhG+2bY564k5zfdvpDkX11rnzHGlaq6lORHk/zDPIbc1qVLk8uDB3ftKVigf/zHyeVe+v/52muTywMHtt/++uuTy9tv//59V65MLvdt+qN34MD2j3Wtx7/Z7dW5udqlS8n+/bv6FAs9MaGqHqqqtapa29jYWORTc7Ormnwtk2V8Tdxa9u9P7rxzV59iliOhV5Ic3XT7yHTbdvtcqKp9Sd6W5OtbH2iMcTbJ2SRZWVkZb2bgTQ92Q/85AP1mORJ6Lsnxqrq7qvYnuT/J6pZ9VpP8wvT6zyb58zFUAoDr2/FIaPoznoeTPJXktiSfGGO8UFWPJVkbY6wm+b0kn6qq9STfyCRUAHBds7wdlzHGuSTntmx7dNP17yT5D/MdDYBl5zcmANBGhABoI0IAtBEhANqIEABtRAiANiIEQBsRAqCNCAHQRoQAaCNCALQRIQDaVNcnLlTVRpK/vcGHOZTd/PTWvcu6XM2aXM2aXM2aXG1ea/L2McbhrRvbIjQPVbU2xljpnuNmY12uZk2uZk2uZk2utttr4u04ANqIEABt9nqEznYPcJOyLlezJlezJlezJlfb1TXZ0z8TAmBv2+tHQgDsYSIEQJs9EaGqOlVVL1XVelU9ss39t1fVZ6b3f76qji1+ysWaYU0+XFUvVtXzVfVnVfX2jjkXaac12bTfz1TVqKpb4lTcWdalqn5u+v3yQlX94aJnXLQZ/vz8eFU9XVVfnP4Zuq9jzkWpqk9U1cWq+tI17q+q+u3pej1fVe+Z25OPMW7qryS3Jfk/Sf5Fkv1J/irJiS37/MckH59evz/JZ7rnvgnW5N8m+WfT679kTb633x1JPpfk2SQr3XPfDOuS5HiSLyb559Pbd3bPfROsydkkvzS9fiLJV7rn3uU1+TdJ3pPkS9e4/74kf5qkkrw3yefn9dx74UjoniTrY4yXxxiXkzyR5MyWfc4k+f3p9c8meV9V1QJnXLQd12SM8fQY49vTm88mObLgGRdtlu+TJPnNJB9N8p1FDtdolnX5UJLHxxjfTJIxxsUFz7hos6zJSPIj0+tvS/J3C5xv4cYYn0vyjevscibJH4yJZ5McrKofm8dz74UI3ZXk/KbbF6bbtt1njHElyaUkP7qQ6XrMsiabPZjJv2KW2Y5rMn0L4egY408WOVizWb5X3pnknVX1F1X1bFWdWth0PWZZk99I8oGqupDkXJJfWcxoN60f9O+cme2bx4Nw86qqDyRZSfLT3bN0qqq3JPmtJB9sHuVmtC+Tt+ROZnLE/Lmq+skxxqutU/V6IMknxxj/var+dZJPVdW7xhjf7R5s2eyFI6FXkhzddPvIdNu2+1TVvkwOn7++kOl6zLImqar3J/m1JKfHGP+0oNm67LQmdyR5V5JnquormbyvvXoLnJwwy/fKhSSrY4zXxxh/k+SvM4nSspplTR5M8mSSjDH+MskPZfKLPG9VM/2d82bshQg9l+R4Vd1dVfszOfFgdcs+q0l+YXr9Z5P8+Zj+NG1J7bgmVfXuJL+TSYCW/T3+ZIc1GWNcGmMcGmMcG2Mcy+TnZKfHGGs94y7MLH9+/jiTo6BU1aFM3p57eZFDLtgsa/LVJO9Lkqr6iUwitLHQKW8uq0l+fnqW3HuTXBpjfG0eD3zTvx03xrhSVQ8neSqTs1o+McZ4oaoeS7I2xlhN8nuZHC6vZ/LDtfv7Jt59M67Jx5L8cJI/mp6j8dUxxum2oXfZjGtyy5lxXZ5K8u+r6sUk/zfJr44xlvadhBnX5CNJfreq/nMmJyl8cJn/YVtVn87kHyKHpj8H+/Ukb02SMcbHM/m52H1J1pN8O8kvzu25l3hdAbjJ7YW34wBYUiIEQBsRAqCNCAHQRoQAaCNCALQRIQDa/D+mNYKIV/dzqwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 1008x504 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "A2m4Z0AkabBn"
},
"source": [
""
],
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment