# Orders and Polytropes: Matrix Algebras from Valuations

[4]:

using Pkg;
Pkg.status()
using Oscar;

      Status ~/.julia/environments/v1.6/Project.toml
[c52e3926] Atom v0.12.32
[7810ee48] Dory v0.1.0 /Users/maazouz/Dropbox/Dory#master
[7073ff75] IJulia v1.23.2
[c8e1da08] IterTools v1.3.0
[e5e0dc1b] Juno v0.8.4
[2edaba10] Nemo v0.22.1
[f1435218] Oscar v0.5.2
[d720cf60] Polymake v0.5.6
[7ef55214] pAdicSolver v0.1.0 /Users/maazouz/Dropbox/pAdicSolver#padicSolvers

[5]:

versioninfo()

Julia Version 1.6.2
Commit 1b93d53fc4 (2021-07-14 15:36 UTC)
Platform Info:
OS: macOS (x86_64-apple-darwin18.7.0)
CPU: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-11.0.1 (ORCJIT, skylake)


## Defining functions

[4]:

#### Function that returns the inequalities defining the polytrope region P_d.

function polytropeRegionInequalities(d)

N = d*(d-1)*(d-1) + 2*d

Ineq = zeros(Integer,(N,1 + d*d))

row = 1

for i in 1:d
for j in 1:d
for k in 1:d

if i != j && j != k
Ineq[row,1 + (i-1)*d + j] = 1;
Ineq[row,1 + (j-1)*d + k] = 1;
Ineq[row,1 + (i-1)*d + k] = -1;

row = row + 1;
end

end
end
end;

for i in 1:d

Ineq[row,1 + (i-1)*d + i ] = 1
row = row + 1
Ineq[row,1 + (i-1)*d + i] = -1
row = row + 1
end;

return Ineq;

end;

#### Function that returns the inequalities defining the truncated polytrope region P_d(M).

function truncatedPolytropeRegionInequalities(M)

d = size(M)[1]

N = d*(d-1)*(d-1) + 2*d + d*(d-1)

Ineq = zeros(Integer,(N,1 + d*d))

row = 1

for i in 1:d
for j in 1:d
for k in 1:d

if i != j && j != k
Ineq[row,1 + (i-1)*d + j] = 1;
Ineq[row,1 + (j-1)*d + k] = 1;
Ineq[row,1 + (i-1)*d + k] = -1;

row = row + 1;
end

end
end
end;

for i in 1:d

Ineq[row,1 + (i-1)*d + i ] = 1;
row = row + 1;
Ineq[row,1 + (i-1)*d + i] = -1;
row = row + 1;
end;

for i in 1:d

for j in 1:d

if i!= j

Ineq[row, 1] = M[i,j];
Ineq[row, 1 + (i-1)*d + j] = -1;

row = row + 1;

end;
end;
end;

return Ineq;

end;

#### Function that returns the inequalities defining the semigroup of fractional ideals .

function SemiGroupInequalities(M)

d = size(M)[1];

N = 2*d*d*(d-1)

Ineq = zeros(Integer,(N + 2,1 + d*d))

row = 1

for i in 1:d
for j in 1:d
for k in 1:d

if k != j

Ineq[row,1] = M[k,j];
Ineq[row,1 + (i-1)*d + j] = -1;
Ineq[row,1 + (i-1)*d + k] = 1;
row = row + 1

end

if k != i
Ineq[row,1] = M[i,k];
Ineq[row,1 + (i-1)*d + j] = -1;
Ineq[row,1 + (k-1)*d + j] = 1;
row = row + 1

end

end
end
end

Ineq[N+1,2] = 1
Ineq[N+2,2] = -1

return Ineq;

end;

#### Function that returns the inequalities defining the polytrope Q_M defined by M.

function QMInequalities(M)

d = size(M)[1];

N = d*(d-1)

Ineq = zeros(Integer,(N + 2, 1 + d))

row = 1

for i in 1:d
for j in 1:d

if i != j

Ineq[row,1] = M[i,j];
Ineq[row,1 + i] = 1;
Ineq[row,1 + j] = -1;
row = row + 1

end
end
end

Ineq[N+1,2] = 1
Ineq[N+2,2] = -1

return Ineq;
end;

#### Tropical Min multiplication

function tropMultiply(A,B)

d = size(A)[1];

C = zeros(Rational,(d,d))

for i in 1:d
for j in 1:d
C[i,j] = minimum(A[i,:] + B[:,j])
end
end

return C
end;

#### Multiplication in the semigroup \mathcal{Q}_M

function tropMultiplyHomotethy(A,B)

d = size(A)[1];

C = zeros(Rational,(d,d))

for i in 1:d
for j in 1:d
C[i,j] = minimum(A[i,:] + B[:,j])
end
end

return C - C[1,1]*ones(Rational, (d,d))
end;

#### Pseudo inverse in the semigroup \mathcal{Q}_M

function invert(M,N)

d = size(M)[1]
invN = zeros(Rational, (d,d))

for i in 1:d
for j in 1:d

a = maximum(M[:,j] - N[:,i])
b = maximum(M[i,:] - N[j,:])

invN[i,j] = max(a,b)
end
end

return invN;

end;

#### Inverse closure of ideals

function idealClosure(M,N)

return invert(M,invert(M,N));

end;

#### Computing inverse closed ideals and invertible ideals in the semigroup \mathcal{Q}_M.

function findGandS(M,L)

N = size(L)[1]
d = size(M)[1]
points = []

for i in 1:N
points = append!(points, [    transpose(   reshape(L[i,:],(d,d))   )   ]  )
end

closed = []
group = []

for N in points

cloN = idealClosure(M,N)

if(N == cloN)
closed = append!(closed,[N])
end
end

d = size(M)[1]
OneMatrix = ones(Rational, (d,d))

for N in closed

for A in closed

NA = tropMultiplyHomotethy(N, A);
AN = tropMultiplyHomotethy(A, N);

if( NA == M && AN == M)
group = append!(group,[N]);
break;
end;
end;
end;

return group, closed

end;

#### Describing G as a group of permutations to determine its structure using GAP.

function GroupAsPermutations(G)

group = Array{PermGroupElem}([])

for g in G

elem = Array{Int64}([])

for h in G

gh = tropMultiplyHomotethy(g,h)

index = findall(==(gh), G)
elem = append!(elem,index)

end

group = append!(group,[cperm(elem)])
end

return group

end;


## Fractional ideals semi group $$\mathcal{Q}_M$$ closed ideals and maximal subgroup elements $$\mathcal{G}_M$$.

### d = 2:

#### Example 1

The semigroup $$\mathcal{Q}_{M_1}$$ and the group $$\mathcal{G}_{M_1}$$ where $$M_1 = \begin{bmatrix}0&1\\1&0\end{bmatrix}$$

[5]:

M = [0 1;
1 0]

d = size(M)[1]
SemiGroupIneq = SemiGroupInequalities(M);

P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];

G , S = findGandS(M,L);

n = size(G)[1]
gens = GroupAsPermutations(G)
Sn = symmetric_group(n)
H = sub(Sn,gens)[1]

println("Groups elements")

for g in G
println("     ", g, "\n")end

println("\n \n Inverse closed fractional ideals")

for s in S
println("     ", s, "\n")
end

println("\n\n  Small group identification", small_group_identification(H))

Groups elements
Polymake.Integer[0 -1; -1 0]

Polymake.Integer[0 1; 1 0]

Inverse closed fractional ideals
Polymake.Integer[0 -1; -1 0]

Polymake.Integer[0 0; 0 0]

Polymake.Integer[0 1; 1 0]

Small group identification(2, 1)


#### Example 2

The semigroup $$\mathcal{Q}_{M}$$ and the group $$\mathcal{G}_{M}$$ where $$M=\begin{bmatrix}0&3\\2&0\end{bmatrix}$$

[13]:

M = [0 3;
2 0]

d = size(M)[1]
SemiGroupIneq = SemiGroupInequalities(M);

P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];

G , S = findGandS(M,L);

n = size(G)[1]
gens = GroupAsPermutations(G)
Sn = symmetric_group(n)
H = sub(Sn,gens)[1]

println("Groups elements")

for g in G
println("     ", g, "\n")end

println("\n \n Inverse closed fractional ideals")

for s in S
println("     ", s, "\n")
end

println("\n\n  Small group identification", small_group_identification(H))

Groups elements
Polymake.Integer[0 -2; -3 0]

Polymake.Integer[0 3; 2 0]

Inverse closed fractional ideals
Polymake.Integer[0 -2; -3 0]

Polymake.Integer[0 -1; -2 0]

Polymake.Integer[0 0; -1 0]

Polymake.Integer[0 1; 0 0]

Polymake.Integer[0 2; 1 0]

Polymake.Integer[0 3; 2 0]

Small group identification(2, 1)


### d = 3:

#### Example 3

The semigroup $$\mathcal{Q}_{M_3}$$ and the group $$\mathcal{G}_{M_3}$$ where $$M_3 = \begin{bmatrix}0&1&1\\1&0&1\\1&1&0\end{bmatrix}$$

[18]:

M = [0 1 1;
1 0 1;
1 1 0];

d = size(M)[1];
SemiGroupIneq = SemiGroupInequalities(M);

P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];

G , S = findGandS(M,L);

n = size(G)[1];
gens = GroupAsPermutations(G);
Sn = symmetric_group(n);
H = sub(Sn,gens)[1];

println("Groups elements")

for g in G
println("     ", g, "\n")end

println("\n \n Inverse closed fractional ideals")

for s in S
println("     ", s, "\n")
end

#println("\n\n  Small group identification", small_group_identification(H))

Groups elements
Polymake.Integer[0 -1 0; -1 0 0; 0 0 -1]

Polymake.Integer[0 -1 0; 0 0 -1; -1 0 0]

Polymake.Integer[0 0 -1; -1 0 0; 0 -1 0]

Polymake.Integer[0 0 -1; 0 -1 0; -1 0 0]

Polymake.Integer[0 1 1; 1 0 1; 1 1 0]

Polymake.Integer[0 1 1; 1 1 0; 1 0 1]

Inverse closed fractional ideals
Polymake.Integer[0 -1 -1; -1 0 0; 0 -1 -1]

Polymake.Integer[0 -1 -1; 0 -1 -1; -1 0 0]

Polymake.Integer[0 -1 -1; 0 0 0; 0 0 0]

Polymake.Integer[0 -1 0; -1 0 -1; -1 0 -1]

Polymake.Integer[0 -1 0; -1 0 0; 0 0 -1]

Polymake.Integer[0 -1 0; 0 -1 0; 0 0 0]

Polymake.Integer[0 -1 0; 0 0 -1; -1 0 0]

Polymake.Integer[0 -1 0; 0 0 0; 0 -1 0]

Polymake.Integer[0 -1 0; 0 0 0; 0 0 0]

Polymake.Integer[0 0 -1; -1 -1 0; -1 -1 0]

Polymake.Integer[0 0 -1; -1 0 0; 0 -1 0]

Polymake.Integer[0 0 -1; 0 -1 0; -1 0 0]

Polymake.Integer[0 0 -1; 0 0 -1; 0 0 0]

Polymake.Integer[0 0 -1; 0 0 0; 0 0 -1]

Polymake.Integer[0 0 -1; 0 0 0; 0 0 0]

Polymake.Integer[0 0 0; -1 -1 0; 0 0 0]

Polymake.Integer[0 0 0; -1 0 -1; 0 0 0]

Polymake.Integer[0 0 0; -1 0 0; -1 0 0]

Polymake.Integer[0 0 0; -1 0 0; 0 0 0]

Polymake.Integer[0 0 0; 0 -1 -1; 0 0 0]

Polymake.Integer[0 0 0; 0 -1 0; 0 -1 0]

Polymake.Integer[0 0 0; 0 -1 0; 0 0 0]

Polymake.Integer[0 0 0; 0 0 -1; 0 0 -1]

Polymake.Integer[0 0 0; 0 0 -1; 0 0 0]

Polymake.Integer[0 0 0; 0 0 0; -1 -1 0]

Polymake.Integer[0 0 0; 0 0 0; -1 0 -1]

Polymake.Integer[0 0 0; 0 0 0; -1 0 0]

Polymake.Integer[0 0 0; 0 0 0; 0 -1 -1]

Polymake.Integer[0 0 0; 0 0 0; 0 -1 0]

Polymake.Integer[0 0 0; 0 0 0; 0 0 -1]

Polymake.Integer[0 0 0; 0 0 0; 0 0 0]

Polymake.Integer[0 0 1; 0 0 1; 1 1 0]

Polymake.Integer[0 0 1; 1 1 0; 0 0 1]

Polymake.Integer[0 0 1; 1 1 1; 1 1 1]

Polymake.Integer[0 1 0; 0 1 0; 1 0 1]

Polymake.Integer[0 1 0; 1 0 1; 0 1 0]

Polymake.Integer[0 1 0; 1 1 1; 1 1 1]

Polymake.Integer[0 1 1; 0 1 1; 1 1 1]

Polymake.Integer[0 1 1; 1 0 0; 1 0 0]

Polymake.Integer[0 1 1; 1 0 1; 1 1 0]

Polymake.Integer[0 1 1; 1 1 0; 1 0 1]

Polymake.Integer[0 1 1; 1 1 1; 0 1 1]

Polymake.Integer[0 1 1; 1 1 1; 1 1 1]



#### Example 4

The semigroup $$\mathcal{Q}_{M}$$ and the group $$\mathcal{G}_{M}$$ where $$M = \begin{bmatrix}0&1&1\\0&0&1\\0&0&0\end{bmatrix}$$

[15]:

M = [0 1 1;
0 0 1;
0 0 0];

d = size(M)[1];
SemiGroupIneq = SemiGroupInequalities(M);

P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];

G , S = findGandS(M,L);

n = size(G)[1];
gens = GroupAsPermutations(G);
Sn = symmetric_group(n);
H = sub(Sn,gens)[1];

println("Groups elements")

for g in G
println("     ", g, "\n")end

println("\n \n Inverse closed fractional ideals")

for s in S
println("     ", s, "\n")
end

println("\n\n  Small group identification", small_group_identification(H))

Groups elements
Polymake.Integer[0 0 0; -1 0 0; -1 -1 0]

Polymake.Integer[0 0 1; 0 0 0; -1 0 0]

Polymake.Integer[0 1 1; 0 0 1; 0 0 0]

Inverse closed fractional ideals
Polymake.Integer[0 0 0; -1 -1 0; -1 -1 0]

Polymake.Integer[0 0 0; -1 0 0; -1 -1 -1]

Polymake.Integer[0 0 0; -1 0 0; -1 -1 0]

Polymake.Integer[0 0 0; 0 0 0; -1 0 0]

Polymake.Integer[0 0 1; -1 0 0; -1 0 0]

Polymake.Integer[0 0 1; 0 0 0; -1 -1 0]

Polymake.Integer[0 0 1; 0 0 0; -1 0 0]

Polymake.Integer[0 0 1; 0 0 1; 0 0 0]

Polymake.Integer[0 1 1; 0 0 0; 0 0 0]

Polymake.Integer[0 1 1; 0 0 1; -1 0 0]

Polymake.Integer[0 1 1; 0 0 1; 0 0 0]

Polymake.Integer[0 1 1; 0 1 1; 0 0 1]

Small group identification(3, 1)


### d = 4:

#### Example 5

The semigroup $$\mathcal{Q}_{M}$$ and the group $$\mathcal{G}_{M}$$ where $$M = \begin{bmatrix}0&1&1&1\\0&0&1&1\\0&0&0&1\\0&0&0&0\end{bmatrix}$$

[16]:

M = [0 1 1 1;
0 0 1 1;
0 0 0 1;
0 0 0 0]

d = size(M)[1];
SemiGroupIneq = SemiGroupInequalities(M);

P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];

G , S = findGandS(M,L);

n = size(G)[1];
gens = GroupAsPermutations(G);
Sn = symmetric_group(n);
H = sub(Sn,gens)[1];

println("Groups elements")

for g in G
println("     ", g, "\n")end

println("\n \n Inverse closed fractional ideals")

for s in S
println("     ", s, "\n")
end

println("\n\n  Small group identification", small_group_identification(H))

Groups elements
Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 0 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 1; 0 0 0 0; -1 0 0 0; -1 -1 0 0]

Polymake.Integer[0 0 1 1; 0 0 0 1; 0 0 0 0; -1 0 0 0]

Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 0 1; 0 0 0 0]

Inverse closed fractional ideals
Polymake.Integer[0 0 0 0; -1 -1 -1 0; -1 -1 -1 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 0; -1 -1 0 0; -1 -1 -1 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 0; -1 -1 0 0; -1 -1 0 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 -1 -1; -1 -1 -1 -1]

Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 -1 0; -1 -1 -1 -1]

Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 -1 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 0 0; -1 -1 -1 -1]

Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 0 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 0; -1 0 0 0; -1 0 0 0; -1 -1 0 0]

Polymake.Integer[0 0 0 0; 0 0 0 0; -1 0 0 0; -1 -1 -1 -1]

Polymake.Integer[0 0 0 0; 0 0 0 0; -1 0 0 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 0; 0 0 0 0; -1 0 0 0; -1 -1 0 0]

Polymake.Integer[0 0 0 0; 0 0 0 0; 0 0 0 0; -1 0 0 0]

Polymake.Integer[0 0 0 1; -1 -1 0 0; -1 -1 0 0; -1 -1 0 0]

Polymake.Integer[0 0 0 1; -1 0 0 0; -1 -1 0 0; -1 -1 0 0]

Polymake.Integer[0 0 0 1; -1 0 0 0; -1 0 0 0; -1 -1 0 0]

Polymake.Integer[0 0 0 1; 0 0 0 0; -1 -1 -1 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 1; 0 0 0 0; -1 -1 0 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 1; 0 0 0 0; -1 -1 0 0; -1 -1 0 0]

Polymake.Integer[0 0 0 1; 0 0 0 0; -1 0 0 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 1; 0 0 0 0; -1 0 0 0; -1 -1 0 0]

Polymake.Integer[0 0 0 1; 0 0 0 0; 0 0 0 0; -1 0 0 0]

Polymake.Integer[0 0 0 1; 0 0 0 1; 0 0 0 0; -1 -1 -1 0]

Polymake.Integer[0 0 0 1; 0 0 0 1; 0 0 0 0; -1 -1 0 0]

Polymake.Integer[0 0 0 1; 0 0 0 1; 0 0 0 0; -1 0 0 0]

Polymake.Integer[0 0 0 1; 0 0 0 1; 0 0 0 1; 0 0 0 0]

Polymake.Integer[0 0 1 1; -1 0 0 0; -1 0 0 0; -1 0 0 0]

Polymake.Integer[0 0 1 1; 0 0 0 0; -1 0 0 0; -1 0 0 0]

Polymake.Integer[0 0 1 1; 0 0 0 0; 0 0 0 0; -1 0 0 0]

Polymake.Integer[0 0 1 1; 0 0 0 1; -1 -1 0 0; -1 -1 0 0]

Polymake.Integer[0 0 1 1; 0 0 0 1; -1 0 0 0; -1 -1 0 0]

Polymake.Integer[0 0 1 1; 0 0 0 1; -1 0 0 0; -1 0 0 0]

Polymake.Integer[0 0 1 1; 0 0 0 1; 0 0 0 0; -1 -1 0 0]

Polymake.Integer[0 0 1 1; 0 0 0 1; 0 0 0 0; -1 0 0 0]

Polymake.Integer[0 0 1 1; 0 0 0 1; 0 0 0 1; 0 0 0 0]

Polymake.Integer[0 0 1 1; 0 0 1 1; 0 0 0 1; -1 -1 0 0]

Polymake.Integer[0 0 1 1; 0 0 1 1; 0 0 0 1; -1 0 0 0]

Polymake.Integer[0 0 1 1; 0 0 1 1; 0 0 0 1; 0 0 0 0]

Polymake.Integer[0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 0 1]

Polymake.Integer[0 1 1 1; 0 0 0 0; 0 0 0 0; 0 0 0 0]

Polymake.Integer[0 1 1 1; 0 0 0 1; 0 0 0 0; 0 0 0 0]

Polymake.Integer[0 1 1 1; 0 0 0 1; 0 0 0 1; 0 0 0 0]

Polymake.Integer[0 1 1 1; 0 0 1 1; -1 0 0 0; -1 0 0 0]

Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 0 0; -1 0 0 0]

Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 0 0; 0 0 0 0]

Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 0 1; -1 0 0 0]

Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 0 1; 0 0 0 0]

Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 1 1; 0 0 0 1]

Polymake.Integer[0 1 1 1; 0 1 1 1; 0 0 1 1; -1 0 0 0]

Polymake.Integer[0 1 1 1; 0 1 1 1; 0 0 1 1; 0 0 0 0]

Polymake.Integer[0 1 1 1; 0 1 1 1; 0 0 1 1; 0 0 0 1]

Polymake.Integer[0 1 1 1; 0 1 1 1; 0 1 1 1; 0 0 1 1]

Small group identification(4, 1)


#### Example 6: warning: It might take a long time to finish the computation!

The semigroup $$\mathcal{Q}_{M}$$ and the group $$\mathcal{G}_{M}$$ where $M =$

[ ]:

M = [0 1 1 1;
1 0 1 1;
1 1 0 1;
1 1 1 0]

d = size(M)[1];
SemiGroupIneq = SemiGroupInequalities(M);

P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];

G , S = findGandS(M,L);

n = size(G)[1];
gens = GroupAsPermutations(G);
Sn = symmetric_group(n);
H = sub(Sn,gens)[1];

println("Groups elements")

for g in G
println("     ", g, "\n")end

println("\n \n Inverse closed fractional ideals")

for s in S
println("     ", s, "\n")
end

println("\n\n  Small group identification", small_group_identification(H))


## Polytrope Region $$\mathcal{P}_d$$ and truncated region $$\mathcal{P}_d(M)$$

### d = 2

#### Example 1

[19]:

M = [0 1;
1 0];

d = size(M)[1];

P_dIneqs = polytropeRegionInequalities(d);
P_dMIneqs = truncatedPolytropeRegionInequalities(M);

P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dM = Oscar.Polymake.polytope.Polytope(INEQUALITIES=P_dMIneqs);

println("The polytrope region P_2 has f_vector: ",P_d.F_VECTOR)
println("\n \n")
println("The truncated polytrope region P_2(M) has f_vector: ",P_dM.F_VECTOR)

The polytrope region P_2 has f_vector: pm::Vector<pm::Integer>

The truncated polytrope region P_2(M) has f_vector: pm::Vector<pm::Integer>
3 4


### d = 3:

#### Example 2

[23]:

M = [0 1 1;
1 0 1;
1 1 0];

d = size(M)[1];

P_dIneqs = polytropeRegionInequalities(d);
P_dMIneqs = truncatedPolytropeRegionInequalities(M);

P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dF_VECTOR = P_d.F_VECTOR;
P_dRays = P_d.RAYS;

P_dM = Oscar.Polymake.polytope.Polytope(INEQUALITIES=P_dMIneqs);
P_dMF_VECTOR = P_dM.F_VECTOR;
P_dMLatticePoints = P_dM.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];

println("The polytrope region P_3 has f_vector: ",P_dF_VECTOR)

println("\n \n")
println("The polytrope region P_3 has rays: ",P_dRays)

println("\n \n")
println("The truncated polytrope region P_3(M) has f_vector: ",P_dMF_VECTOR)

println("\n \n")
println("The truncated polytrope region P_3(M) has lattice points: ",P_dMLatticePoints)

The polytrope region P_3 has f_vector: pm::Vector<pm::Integer>
5 9 6

The polytrope region P_3 has rays: pm::Matrix<pm::Rational>
0 0 1 2 0 0 1 -1 0 0
0 0 0 1 0 0 1 0 0 0
0 0 1 1 0 0 1 -1 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 1 0 0 0

The truncated polytrope region P_3(M) has f_vector: pm::Vector<pm::Integer>
36 132 199 151 60 12

The truncated polytrope region P_3(M) has lattice points: pm::Matrix<pm::Integer>
0 -1 -1 1 0 0 1 0 0
0 -1 0 1 0 1 0 -1 0
0 -1 0 1 0 1 1 0 0
0 0 -1 0 0 -1 1 1 0
0 0 -1 1 0 0 1 1 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 0
0 0 0 1 0 0 1 0 0
0 0 0 1 0 0 1 1 0
0 0 0 1 0 1 0 0 0
0 0 0 1 0 1 1 0 0
0 0 0 1 0 1 1 1 0
0 0 1 0 0 1 -1 -1 0
0 0 1 0 0 1 0 0 0
0 0 1 0 0 1 1 1 0
0 0 1 1 0 1 0 -1 0
0 0 1 1 0 1 0 0 0
0 0 1 1 0 1 1 0 0
0 0 1 1 0 1 1 1 0
0 1 0 -1 0 -1 0 1 0
0 1 0 0 0 -1 1 1 0
0 1 0 0 0 0 0 1 0
0 1 0 0 0 0 1 1 0
0 1 0 1 0 0 1 1 0
0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 1 1 0
0 1 1 -1 0 0 -1 0 0
0 1 1 -1 0 0 0 1 0
0 1 1 0 0 0 0 0 0
0 1 1 0 0 0 0 1 0
0 1 1 0 0 0 1 1 0
0 1 1 0 0 1 -1 0 0
0 1 1 0 0 1 0 0 0
0 1 1 0 0 1 0 1 0
0 1 1 0 0 1 1 1 0
0 1 1 1 0 0 1 0 0
0 1 1 1 0 0 1 1 0
0 1 1 1 0 1 0 0 0
0 1 1 1 0 1 0 1 0
0 1 1 1 0 1 1 0 0
0 1 1 1 0 1 1 1 0



#### Example 3

[24]:

M = [0 1 1;
0 0 1;
0 0 0];

d = size(M)[1];

P_dIneqs = polytropeRegionInequalities(d);
P_dMIneqs = truncatedPolytropeRegionInequalities(M);

P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dF_VECTOR = P_d.F_VECTOR;
P_dRays = P_d.RAYS;

P_dM = Oscar.Polymake.polytope.Polytope(INEQUALITIES=P_dMIneqs);
P_dMF_VECTOR = P_dM.F_VECTOR;
P_dMLatticePoints = P_dM.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];

println("The polytrope region P_3 has f_vector: ",P_dF_VECTOR)

println("\n \n")
println("The polytrope region P_3 has rays: ",P_dRays)

println("\n \n")
println("The truncated polytrope region P_3(M) has f_vector: ",P_dMF_VECTOR)

println("\n \n")
println("The truncated polytrope region P_3(M) has lattice points: ",P_dMLatticePoints)

The polytrope region P_3 has f_vector: pm::Vector<pm::Integer>
5 9 6

The polytrope region P_3 has rays: pm::Matrix<pm::Rational>
0 0 1 2 0 0 1 -1 0 0
0 0 0 1 0 0 1 0 0 0
0 0 1 1 0 0 1 -1 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 1 0 0 0

The truncated polytrope region P_3(M) has f_vector: pm::Vector<pm::Integer>
8 27 49 51 30 9

The truncated polytrope region P_3(M) has lattice points: pm::Matrix<pm::Integer>
0 0 0 0 0 0 0 0 0
0 0 1 0 0 1 -1 -1 0
0 0 1 0 0 1 0 0 0
0 1 1 -1 0 0 -1 0 0
0 1 1 0 0 0 0 0 0
0 1 1 0 0 1 -1 0 0
0 1 1 0 0 1 0 0 0



### d = 4:

#### Example 4

[25]:

M = [0 1 1 1;
0 0 1 1;
0 0 0 1;
0 0 0 0];

d = size(M)[1];

P_dIneqs = polytropeRegionInequalities(d);
P_dMIneqs = truncatedPolytropeRegionInequalities(M);

P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dF_VECTOR = P_d.F_VECTOR;
P_dRays = P_d.RAYS;

P_dM = Oscar.Polymake.polytope.Polytope(INEQUALITIES=P_dMIneqs);
P_dMF_VECTOR = P_dM.F_VECTOR;
P_dMLatticePoints = P_dM.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];

println("The polytrope region P_3 has f_vector: ",P_dF_VECTOR)

println("\n \n")
println("The polytrope region P_3 has rays: ",P_dRays)

println("\n \n")
println("The truncated polytrope region P_3(M) has f_vector: ",P_dMF_VECTOR)

println("\n \n")
println("The truncated polytrope region P_3(M) has lattice points: ",P_dMLatticePoints)

The polytrope region P_3 has f_vector: pm::Vector<pm::Integer>
37 327 1140 1902 1680 808 204 24

The polytrope region P_3 has rays: pm::Matrix<pm::Rational>
0 0 1 1 1 0 0 0 0 0 1 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 1 1 1 -1 0 0 0 0 1 0 0 0 1 1 0
0 0 1 1 1 -1 0 0 0 0 1 0 1 -1 0 0 0
0 0 1 1 1 -1 0 0 0 0 1 0 0 0 1 0 0
0 0 1 1 1 -1 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 1 2 1 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 1 1 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 0
0 0 1 1/2 1 -1/2 0 0 0 0 1 0 1/2 -1/2 1/2 0 0
0 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 1 0
0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0
0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 0
0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 1 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1 0 1/2 0 1/2 0 0
0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0
0 0 1 1 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0
0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 1/2 0
0 0 1 1 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 0 0 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 0 0
0 0 1 1/2 1/2 0 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1/2 1/2 0 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0

The truncated polytrope region P_3(M) has f_vector: pm::Vector<pm::Integer>
41 481 2674 8573 17473 23827 22264 14310 6233 1772 306 28

The truncated polytrope region P_3(M) has lattice points: pm::Matrix<pm::Integer>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1 0 0 0 1 -1 -1 -1 0
0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0
0 0 1 1 0 0 1 1 -1 -1 0 0 -1 -1 0 0
0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0
0 0 1 1 0 0 1 1 0 0 0 1 -1 -1 0 0
0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0
0 1 1 1 -1 0 0 0 -1 0 0 0 -1 0 0 0
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 1 0 0 0 1 -1 0 0 0
0 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0
0 1 1 1 0 0 1 1 -1 0 0 0 -1 0 0 0
0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0
0 1 1 1 0 0 1 1 0 0 0 1 -1 0 0 0
0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0



#### Example 5

[27]:

M = [0 1 1 1;
1 0 1 1;
1 1 0 1;
1 1 1 0];

d = size(M)[1];

P_dIneqs = polytropeRegionInequalities(d);
P_dMIneqs = truncatedPolytropeRegionInequalities(M);

P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dF_VECTOR = P_d.F_VECTOR;
P_dRays = P_d.RAYS;

P_dM = Oscar.Polymake.polytope.Polytope(INEQUALITIES=P_dMIneqs);
P_dMF_VECTOR = P_dM.F_VECTOR;
P_dMLatticePoints = P_dM.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];

println("The polytrope region P_4 has f_vector: ",P_dF_VECTOR)

println("\n \n")
println("The polytrope region P_4 has rays: ",P_dRays)

println("\n \n")
println("The truncated polytrope region P_4(M) has f_vector: ",P_dMF_VECTOR)

println("\n \n")
println("The truncated polytrope region P_4(M) has lattice points: ",P_dMLatticePoints)

The polytrope region P_4 has f_vector: pm::Vector<pm::Integer>
37 327 1140 1902 1680 808 204 24

The polytrope region P_4 has rays: pm::Matrix<pm::Rational>
0 0 1 1 1 0 0 0 0 0 1 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 1 1 1 -1 0 0 0 0 1 0 0 0 1 1 0
0 0 1 1 1 -1 0 0 0 0 1 0 1 -1 0 0 0
0 0 1 1 1 -1 0 0 0 0 1 0 0 0 1 0 0
0 0 1 1 1 -1 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 1 2 1 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 1 1 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 0
0 0 1 1/2 1 -1/2 0 0 0 0 1 0 1/2 -1/2 1/2 0 0
0 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 1 0
0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0
0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 0
0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 1 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1 0 1/2 0 1/2 0 0
0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0
0 0 1 1 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0
0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 1/2 0
0 0 1 1 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 0 0 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 0 0
0 0 1 1/2 1/2 0 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1/2 1/2 0 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0

The truncated polytrope region P_4(M) has f_vector: pm::Vector<pm::Integer>
960 15612 82755 219299 341638 337275 218454 93894 26643 4892 558 36

The truncated polytrope region P_4(M) has lattice points: pm::Matrix<pm::Integer>
0 -1 -1 -1 1 0 0 0 1 0 0 0 1 0 0 0
0 -1 -1 0 1 0 0 1 1 0 0 1 0 -1 -1 0
0 -1 -1 0 1 0 0 1 1 0 0 1 1 0 0 0
0 -1 0 -1 1 0 1 0 0 -1 0 -1 1 0 1 0
0 -1 0 -1 1 0 1 0 1 0 0 0 1 0 1 0
0 -1 0 0 1 0 1 1 0 -1 0 0 0 -1 0 0
0 -1 0 0 1 0 1 1 0 -1 0 0 1 0 1 0
0 -1 0 0 1 0 1 1 1 0 0 0 1 0 0 0
0 -1 0 0 1 0 1 1 1 0 0 0 1 0 1 0
0 -1 0 0 1 0 1 1 1 0 0 1 0 -1 0 0
0 -1 0 0 1 0 1 1 1 0 0 1 1 0 0 0
0 -1 0 0 1 0 1 1 1 0 0 1 1 0 1 0
0 0 -1 -1 0 0 -1 -1 1 1 0 0 1 1 0 0
0 0 -1 -1 1 0 0 0 1 1 0 0 1 1 0 0
0 0 -1 0 0 0 -1 0 1 1 0 1 0 0 -1 0
0 0 -1 0 0 0 -1 0 1 1 0 1 1 1 0 0
0 0 -1 0 1 0 0 0 1 1 0 1 1 0 0 0
0 0 -1 0 1 0 0 0 1 1 0 1 1 1 0 0
0 0 -1 0 1 0 0 1 1 1 0 1 0 0 -1 0
0 0 -1 0 1 0 0 1 1 1 0 1 1 0 0 0
0 0 -1 0 1 0 0 1 1 1 0 1 1 1 0 0
0 0 0 -1 0 0 0 -1 0 0 0 -1 1 1 1 0
0 0 0 -1 0 0 0 -1 1 1 0 0 1 1 1 0
0 0 0 -1 1 0 0 0 1 0 0 0 1 1 1 0
0 0 0 -1 1 0 0 0 1 1 0 0 1 1 1 0
0 0 0 -1 1 0 1 0 0 0 0 -1 1 1 1 0
0 0 0 -1 1 0 1 0 1 0 0 0 1 1 1 0
0 0 0 -1 1 0 1 0 1 1 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0
0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0
0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0
0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 0
0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0
0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0
0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 0
0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0
0 0 0 0 1 0 0 0 1 1 0 1 1 0 0 0
0 0 0 0 1 0 0 0 1 1 0 1 1 1 0 0
0 0 0 0 1 0 0 0 1 1 0 1 1 1 1 0
0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0
0 0 0 0 1 0 0 1 1 0 0 1 1 0 0 0
0 0 0 0 1 0 0 1 1 0 0 1 1 1 1 0
0 0 0 0 1 0 0 1 1 1 0 1 0 0 0 0
0 0 0 0 1 0 0 1 1 1 0 1 1 0 0 0
0 0 0 0 1 0 0 1 1 1 0 1 1 1 0 0
0 0 0 0 1 0 0 1 1 1 0 1 1 1 1 0
0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0
0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0
0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0
0 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0
0 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0
0 0 0 0 1 0 1 0 1 1 0 1 1 0 1 0
0 0 0 0 1 0 1 0 1 1 0 1 1 1 1 0
0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0
0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 0
0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0
0 0 0 0 1 0 1 1 1 0 0 0 1 0 1 0
0 0 0 0 1 0 1 1 1 0 0 0 1 1 1 0
0 0 0 0 1 0 1 1 1 0 0 1 0 0 0 0
0 0 0 0 1 0 1 1 1 0 0 1 1 0 0 0
0 0 0 0 1 0 1 1 1 0 0 1 1 0 1 0
0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 0
0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0
0 0 0 0 1 0 1 1 1 1 0 0 1 1 1 0
0 0 0 0 1 0 1 1 1 1 0 1 0 0 0 0
0 0 0 0 1 0 1 1 1 1 0 1 1 0 0 0
0 0 0 0 1 0 1 1 1 1 0 1 1 0 1 0
0 0 0 0 1 0 1 1 1 1 0 1 1 1 0 0
0 0 0 0 1 0 1 1 1 1 0 1 1 1 1 0
0 0 0 1 0 0 0 1 0 0 0 1 -1 -1 -1 0
0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0
0 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0
0 0 0 1 0 0 0 1 1 1 0 1 0 0 -1 0
0 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0
0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 0
0 0 0 1 0 0 0 1 1 1 0 1 1 1 1 0
0 0 0 1 1 0 0 1 1 0 0 1 0 -1 -1 0
0 0 0 1 1 0 0 1 1 0 0 1 0 0 0 0
0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0
0 0 0 1 1 0 0 1 1 0 0 1 1 1 1 0
0 0 0 1 1 0 0 1 1 1 0 1 0 0 -1 0
0 0 0 1 1 0 0 1 1 1 0 1 0 0 0 0
0 0 0 1 1 0 0 1 1 1 0 1 1 0 0 0
0 0 0 1 1 0 0 1 1 1 0 1 1 1 0 0
0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0
0 0 0 1 1 0 1 1 0 0 0 1 0 -1 0 0
0 0 0 1 1 0 1 1 0 0 0 1 0 0 0 0
0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 0
0 0 0 1 1 0 1 1 0 0 0 1 1 1 1 0
0 0 0 1 1 0 1 1 1 0 0 1 0 -1 0 0
0 0 0 1 1 0 1 1 1 0 0 1 0 0 0 0
0 0 0 1 1 0 1 1 1 0 0 1 1 0 0 0
0 0 0 1 1 0 1 1 1 0 0 1 1 0 1 0
0 0 0 1 1 0 1 1 1 0 0 1 1 1 1 0
0 0 0 1 1 0 1 1 1 1 0 1 0 0 0 0
0 0 0 1 1 0 1 1 1 1 0 1 1 0 0 0
0 0 0 1 1 0 1 1 1 1 0 1 1 0 1 0
0 0 0 1 1 0 1 1 1 1 0 1 1 1 0 0
0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0
0 0 1 0 0 0 1 0 -1 -1 0 -1 0 0 1 0
0 0 1 0 0 0 1 0 0 0 0 -1 1 1 1 0
0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0
0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 0
0 0 1 0 0 0 1 0 1 1 0 0 1 1 1 0
0 0 1 0 0 0 1 0 1 1 0 1 0 0 1 0
0 0 1 0 0 0 1 0 1 1 0 1 1 1 1 0
0 0 1 0 1 0 1 0 0 -1 0 -1 1 0 1 0
0 0 1 0 1 0 1 0 0 0 0 -1 1 1 1 0
0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0
0 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0
0 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0
0 0 1 0 1 0 1 0 1 0 0 0 1 1 1 0
0 0 1 0 1 0 1 0 1 1 0 0 1 1 1 0
0 0 1 0 1 0 1 0 1 1 0 1 1 0 1 0
0 0 1 0 1 0 1 0 1 1 0 1 1 1 1 0
0 0 1 0 1 0 1 1 0 -1 0 0 0 0 1 0
0 0 1 0 1 0 1 1 0 -1 0 0 1 0 1 0
0 0 1 0 1 0 1 1 0 0 0 0 0 0 1 0
0 0 1 0 1 0 1 1 0 0 0 0 1 0 1 0
0 0 1 0 1 0 1 1 0 0 0 0 1 1 1 0
0 0 1 0 1 0 1 1 1 0 0 0 1 0 1 0
0 0 1 0 1 0 1 1 1 0 0 0 1 1 1 0
0 0 1 0 1 0 1 1 1 0 0 1 0 0 1 0
0 0 1 0 1 0 1 1 1 0 0 1 1 0 1 0
0 0 1 0 1 0 1 1 1 0 0 1 1 1 1 0
0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0
0 0 1 0 1 0 1 1 1 1 0 1 0 0 1 0
0 0 1 0 1 0 1 1 1 1 0 1 1 0 1 0
0 0 1 0 1 0 1 1 1 1 0 1 1 1 1 0
0 0 1 1 0 0 1 1 -1 -1 0 0 -1 -1 0 0
0 0 1 1 0 0 1 1 -1 -1 0 0 0 0 1 0
0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0
0 0 1 1 0 0 1 1 0 0 0 0 0 0 1 0
0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 0
0 0 1 1 0 0 1 1 0 0 0 1 -1 -1 0 0
0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0
0 0 1 1 0 0 1 1 0 0 0 1 0 0 1 0
0 0 1 1 0 0 1 1 0 0 0 1 1 1 1 0
0 0 1 1 0 0 1 1 1 1 0 0 1 1 0 0
0 0 1 1 0 0 1 1 1 1 0 0 1 1 1 0
0 0 1 1 0 0 1 1 1 1 0 1 0 0 0 0
0 0 1 1 0 0 1 1 1 1 0 1 0 0 1 0
0 0 1 1 0 0 1 1 1 1 0 1 1 1 0 0
0 0 1 1 0 0 1 1 1 1 0 1 1 1 1 0
0 0 1 1 1 0 1 1 0 -1 0 0 0 -1 0 0
0 0 1 1 1 0 1 1 0 -1 0 0 0 0 1 0
0 0 1 1 1 0 1 1 0 -1 0 0 1 0 1 0
0 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0
0 0 1 1 1 0 1 1 0 0 0 0 0 0 1 0
0 0 1 1 1 0 1 1 0 0 0 0 1 0 1 0
0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 0
0 0 1 1 1 0 1 1 0 0 0 1 0 -1 0 0
0 0 1 1 1 0 1 1 0 0 0 1 0 0 0 0
0 0 1 1 1 0 1 1 0 0 0 1 0 0 1 0
0 0 1 1 1 0 1 1 0 0 0 1 1 0 1 0
0 0 1 1 1 0 1 1 0 0 0 1 1 1 1 0
0 0 1 1 1 0 1 1 1 0 0 0 1 0 0 0
0 0 1 1 1 0 1 1 1 0 0 0 1 0 1 0
0 0 1 1 1 0 1 1 1 0 0 0 1 1 1 0
0 0 1 1 1 0 1 1 1 0 0 1 0 -1 0 0
0 0 1 1 1 0 1 1 1 0 0 1 0 0 0 0
0 0 1 1 1 0 1 1 1 0 0 1 0 0 1 0
0 0 1 1 1 0 1 1 1 0 0 1 1 0 0 0
0 0 1 1 1 0 1 1 1 0 0 1 1 0 1 0
0 0 1 1 1 0 1 1 1 0 0 1 1 1 1 0
0 0 1 1 1 0 1 1 1 1 0 0 1 1 0 0
0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0
0 0 1 1 1 0 1 1 1 1 0 1 0 0 0 0
0 0 1 1 1 0 1 1 1 1 0 1 0 0 1 0
0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 0
0 0 1 1 1 0 1 1 1 1 0 1 1 0 1 0
0 0 1 1 1 0 1 1 1 1 0 1 1 1 0 0
0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0
0 1 0 0 -1 0 -1 -1 0 1 0 0 0 1 0 0
0 1 0 0 0 0 -1 -1 1 1 0 0 1 1 0 0
0 1 0 0 0 0 -1 0 1 1 0 1 0 1 0 0
0 1 0 0 0 0 -1 0 1 1 0 1 1 1 0 0
0 1 0 0 0 0 0 -1 0 1 0 0 1 1 1 0
0 1 0 0 0 0 0 -1 1 1 0 0 1 1 1 0
0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0
0 1 0 0 0 0 0 0 0 1 0 0 1 1 1 0
0 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0
0 1 0 0 0 0 0 0 1 1 0 0 1 1 1 0
0 1 0 0 0 0 0 0 1 1 0 1 0 1 0 0
0 1 0 0 0 0 0 0 1 1 0 1 1 1 0 0
0 1 0 0 0 0 0 0 1 1 0 1 1 1 1 0
0 1 0 0 1 0 0 0 1 1 0 0 1 1 0 0
0 1 0 0 1 0 0 0 1 1 0 0 1 1 1 0
0 1 0 0 1 0 0 0 1 1 0 1 1 1 0 0
0 1 0 0 1 0 0 0 1 1 0 1 1 1 1 0
0 1 0 0 1 0 0 1 1 1 0 1 0 1 0 0
0 1 0 0 1 0 0 1 1 1 0 1 1 1 0 0
0 1 0 0 1 0 0 1 1 1 0 1 1 1 1 0
0 1 0 0 1 0 1 0 0 1 0 0 1 1 1 0
0 1 0 0 1 0 1 0 1 1 0 0 1 1 1 0
0 1 0 0 1 0 1 0 1 1 0 1 1 1 1 0
0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 0
0 1 0 0 1 0 1 1 0 1 0 0 1 1 1 0
0 1 0 0 1 0 1 1 1 1 0 0 1 1 0 0
0 1 0 0 1 0 1 1 1 1 0 0 1 1 1 0
0 1 0 0 1 0 1 1 1 1 0 1 0 1 0 0
0 1 0 0 1 0 1 1 1 1 0 1 1 1 0 0
0 1 0 0 1 0 1 1 1 1 0 1 1 1 1 0
0 1 0 1 -1 0 -1 0 0 1 0 1 -1 0 -1 0
0 1 0 1 -1 0 -1 0 0 1 0 1 0 1 0 0
0 1 0 1 0 0 -1 0 1 1 0 1 0 0 -1 0
0 1 0 1 0 0 -1 0 1 1 0 1 0 1 0 0
0 1 0 1 0 0 -1 0 1 1 0 1 1 1 0 0
0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0
0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0
0 1 0 1 0 0 0 0 0 1 0 1 1 1 1 0
0 1 0 1 0 0 0 0 1 1 0 1 0 0 0 0
0 1 0 1 0 0 0 0 1 1 0 1 0 1 0 0
0 1 0 1 0 0 0 0 1 1 0 1 1 1 0 0
0 1 0 1 0 0 0 0 1 1 0 1 1 1 1 0
0 1 0 1 0 0 0 1 0 1 0 1 -1 0 -1 0
0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0
0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 0
0 1 0 1 0 0 0 1 0 1 0 1 1 1 1 0
0 1 0 1 0 0 0 1 1 1 0 1 0 0 -1 0
0 1 0 1 0 0 0 1 1 1 0 1 0 0 0 0
0 1 0 1 0 0 0 1 1 1 0 1 0 1 0 0
0 1 0 1 0 0 0 1 1 1 0 1 1 1 0 0
0 1 0 1 0 0 0 1 1 1 0 1 1 1 1 0
0 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0
0 1 0 1 1 0 0 0 1 1 0 1 1 1 0 0
0 1 0 1 1 0 0 0 1 1 0 1 1 1 1 0
0 1 0 1 1 0 0 1 1 1 0 1 0 0 -1 0
0 1 0 1 1 0 0 1 1 1 0 1 0 0 0 0
0 1 0 1 1 0 0 1 1 1 0 1 0 1 0 0
0 1 0 1 1 0 0 1 1 1 0 1 1 0 0 0
0 1 0 1 1 0 0 1 1 1 0 1 1 1 0 0
0 1 0 1 1 0 0 1 1 1 0 1 1 1 1 0
0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0
0 1 0 1 1 0 1 0 0 1 0 1 1 1 1 0
0 1 0 1 1 0 1 0 1 1 0 1 1 0 1 0
0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 0
0 1 0 1 1 0 1 1 0 1 0 1 0 0 0 0
0 1 0 1 1 0 1 1 0 1 0 1 0 1 0 0
0 1 0 1 1 0 1 1 0 1 0 1 1 0 1 0
0 1 0 1 1 0 1 1 0 1 0 1 1 1 1 0
0 1 0 1 1 0 1 1 1 1 0 1 0 0 0 0
0 1 0 1 1 0 1 1 1 1 0 1 0 1 0 0
0 1 0 1 1 0 1 1 1 1 0 1 1 0 0 0
0 1 0 1 1 0 1 1 1 1 0 1 1 0 1 0
0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 0
0 1 0 1 1 0 1 1 1 1 0 1 1 1 1 0
0 1 1 0 -1 0 0 -1 -1 0 0 -1 0 1 1 0
0 1 1 0 -1 0 0 -1 0 1 0 0 0 1 1 0
0 1 1 0 0 0 0 -1 0 0 0 -1 1 1 1 0
0 1 1 0 0 0 0 -1 0 1 0 0 1 1 1 0
0 1 1 0 0 0 0 -1 1 1 0 0 1 1 1 0
0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0
0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0
0 1 1 0 0 0 0 0 0 1 0 0 0 1 1 0
0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 0
0 1 1 0 0 0 0 0 1 1 0 0 1 1 1 0
0 1 1 0 0 0 0 0 1 1 0 1 0 1 1 0
0 1 1 0 0 0 0 0 1 1 0 1 1 1 1 0
0 1 1 0 0 0 1 0 -1 0 0 -1 0 1 1 0
0 1 1 0 0 0 1 0 0 0 0 -1 1 1 1 0
0 1 1 0 0 0 1 0 0 0 0 0 0 1 1 0
0 1 1 0 0 0 1 0 0 0 0 0 1 1 1 0
0 1 1 0 0 0 1 0 0 1 0 0 0 1 1 0
0 1 1 0 0 0 1 0 0 1 0 0 1 1 1 0
0 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0
0 1 1 0 0 0 1 0 1 1 0 1 0 1 1 0
0 1 1 0 0 0 1 0 1 1 0 1 1 1 1 0
0 1 1 0 1 0 0 0 1 0 0 0 1 1 1 0
0 1 1 0 1 0 0 0 1 1 0 0 1 1 1 0
0 1 1 0 1 0 0 0 1 1 0 1 1 1 1 0
0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
0 1 1 0 1 0 0 1 1 0 0 1 1 1 1 0
0 1 1 0 1 0 0 1 1 1 0 1 0 1 1 0
0 1 1 0 1 0 0 1 1 1 0 1 1 1 1 0
0 1 1 0 1 0 1 0 0 0 0 -1 1 1 1 0
0 1 1 0 1 0 1 0 0 0 0 0 1 1 1 0
0 1 1 0 1 0 1 0 0 1 0 0 1 1 1 0
0 1 1 0 1 0 1 0 1 0 0 0 1 1 1 0
0 1 1 0 1 0 1 0 1 1 0 0 1 1 1 0
0 1 1 0 1 0 1 0 1 1 0 1 1 1 1 0
0 1 1 0 1 0 1 1 0 0 0 0 0 1 1 0
0 1 1 0 1 0 1 1 0 0 0 0 1 1 1 0
0 1 1 0 1 0 1 1 0 1 0 0 0 1 1 0
0 1 1 0 1 0 1 1 0 1 0 0 1 1 1 0
0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 0
0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0
0 1 1 0 1 0 1 1 1 0 0 1 1 1 1 0
0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0
0 1 1 0 1 0 1 1 1 1 0 1 0 1 1 0
0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0
0 1 1 1 -1 0 0 0 -1 0 0 0 -1 0 0 0
0 1 1 1 -1 0 0 0 -1 0 0 0 0 1 1 0
0 1 1 1 -1 0 0 0 0 1 0 0 0 1 0 0
0 1 1 1 -1 0 0 0 0 1 0 0 0 1 1 0
0 1 1 1 -1 0 0 0 0 1 0 1 -1 0 0 0
0 1 1 1 -1 0 0 0 0 1 0 1 0 1 0 0
0 1 1 1 -1 0 0 0 0 1 0 1 0 1 1 0
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0
0 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0
0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0
0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 0
0 1 1 1 0 0 0 0 0 1 0 0 1 1 1 0
0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0
0 1 1 1 0 0 0 0 0 1 0 1 0 1 0 0
0 1 1 1 0 0 0 0 0 1 0 1 0 1 1 0
0 1 1 1 0 0 0 0 0 1 0 1 1 1 1 0
0 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0
0 1 1 1 0 0 0 0 1 1 0 0 1 1 1 0
0 1 1 1 0 0 0 0 1 1 0 1 0 0 0 0
0 1 1 1 0 0 0 0 1 1 0 1 0 1 0 0
0 1 1 1 0 0 0 0 1 1 0 1 0 1 1 0
0 1 1 1 0 0 0 0 1 1 0 1 1 1 0 0
0 1 1 1 0 0 0 0 1 1 0 1 1 1 1 0
0 1 1 1 0 0 0 1 0 0 0 1 -1 0 0 0
0 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0
0 1 1 1 0 0 0 1 0 0 0 1 0 1 1 0
0 1 1 1 0 0 0 1 0 0 0 1 1 1 1 0
0 1 1 1 0 0 0 1 0 1 0 1 -1 0 0 0
0 1 1 1 0 0 0 1 0 1 0 1 0 0 0 0
0 1 1 1 0 0 0 1 0 1 0 1 0 1 0 0
0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 0
0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0
0 1 1 1 0 0 0 1 1 1 0 1 0 0 0 0
0 1 1 1 0 0 0 1 1 1 0 1 0 1 0 0
0 1 1 1 0 0 0 1 1 1 0 1 0 1 1 0
0 1 1 1 0 0 0 1 1 1 0 1 1 1 0 0
0 1 1 1 0 0 0 1 1 1 0 1 1 1 1 0
0 1 1 1 0 0 1 0 -1 0 0 0 0 0 1 0
0 1 1 1 0 0 1 0 -1 0 0 0 0 1 1 0
0 1 1 1 0 0 1 0 0 0 0 0 0 0 1 0
0 1 1 1 0 0 1 0 0 0 0 0 0 1 1 0
0 1 1 1 0 0 1 0 0 0 0 0 1 1 1 0
0 1 1 1 0 0 1 0 0 1 0 0 0 1 1 0
0 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0
0 1 1 1 0 0 1 0 0 1 0 1 0 0 1 0
0 1 1 1 0 0 1 0 0 1 0 1 0 1 1 0
0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 0
0 1 1 1 0 0 1 0 1 1 0 0 1 1 1 0
0 1 1 1 0 0 1 0 1 1 0 1 0 0 1 0
0 1 1 1 0 0 1 0 1 1 0 1 0 1 1 0
0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0
0 1 1 1 0 0 1 1 -1 0 0 0 -1 0 0 0
0 1 1 1 0 0 1 1 -1 0 0 0 0 0 1 0
0 1 1 1 0 0 1 1 -1 0 0 0 0 1 1 0
0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0
0 1 1 1 0 0 1 1 0 0 0 0 0 0 1 0
0 1 1 1 0 0 1 1 0 0 0 0 0 1 1 0
0 1 1 1 0 0 1 1 0 0 0 0 1 1 1 0
0 1 1 1 0 0 1 1 0 0 0 1 -1 0 0 0
0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0
0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0
0 1 1 1 0 0 1 1 0 0 0 1 0 1 1 0
0 1 1 1 0 0 1 1 0 0 0 1 1 1 1 0
0 1 1 1 0 0 1 1 0 1 0 0 0 1 0 0
0 1 1 1 0 0 1 1 0 1 0 0 0 1 1 0
0 1 1 1 0 0 1 1 0 1 0 0 1 1 1 0
0 1 1 1 0 0 1 1 0 1 0 1 -1 0 0 0
0 1 1 1 0 0 1 1 0 1 0 1 0 0 0 0
0 1 1 1 0 0 1 1 0 1 0 1 0 0 1 0
0 1 1 1 0 0 1 1 0 1 0 1 0 1 0 0
0 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0
0 1 1 1 0 0 1 1 0 1 0 1 1 1 1 0
0 1 1 1 0 0 1 1 1 1 0 0 1 1 0 0
0 1 1 1 0 0 1 1 1 1 0 0 1 1 1 0
0 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0
0 1 1 1 0 0 1 1 1 1 0 1 0 0 1 0
0 1 1 1 0 0 1 1 1 1 0 1 0 1 0 0
0 1 1 1 0 0 1 1 1 1 0 1 0 1 1 0
0 1 1 1 0 0 1 1 1 1 0 1 1 1 0 0
0 1 1 1 0 0 1 1 1 1 0 1 1 1 1 0
0 1 1 1 1 0 0 0 1 0 0 0 1 0 0 0
0 1 1 1 1 0 0 0 1 0 0 0 1 1 1 0
0 1 1 1 1 0 0 0 1 1 0 0 1 1 0 0
0 1 1 1 1 0 0 0 1 1 0 0 1 1 1 0
0 1 1 1 1 0 0 0 1 1 0 1 1 0 0 0
0 1 1 1 1 0 0 0 1 1 0 1 1 1 0 0
0 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0
0 1 1 1 1 0 0 1 1 0 0 1 0 0 0 0
0 1 1 1 1 0 0 1 1 0 0 1 0 1 1 0
0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 0
0 1 1 1 1 0 0 1 1 0 0 1 1 1 1 0
0 1 1 1 1 0 0 1 1 1 0 1 0 0 0 0
0 1 1 1 1 0 0 1 1 1 0 1 0 1 0 0
0 1 1 1 1 0 0 1 1 1 0 1 0 1 1 0
0 1 1 1 1 0 0 1 1 1 0 1 1 0 0 0
0 1 1 1 1 0 0 1 1 1 0 1 1 1 0 0
0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0
0 1 1 1 1 0 1 0 0 0 0 0 1 0 1 0
0 1 1 1 1 0 1 0 0 0 0 0 1 1 1 0
0 1 1 1 1 0 1 0 0 1 0 0 1 1 1 0
0 1 1 1 1 0 1 0 0 1 0 1 1 0 1 0
0 1 1 1 1 0 1 0 0 1 0 1 1 1 1 0
0 1 1 1 1 0 1 0 1 0 0 0 1 0 1 0
0 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0
0 1 1 1 1 0 1 0 1 1 0 0 1 1 1 0
0 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0
0 1 1 1 1 0 1 0 1 1 0 1 1 1 1 0
0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0
0 1 1 1 1 0 1 1 0 0 0 0 0 0 1 0
0 1 1 1 1 0 1 1 0 0 0 0 0 1 1 0
0 1 1 1 1 0 1 1 0 0 0 0 1 0 1 0
0 1 1 1 1 0 1 1 0 0 0 0 1 1 1 0
0 1 1 1 1 0 1 1 0 0 0 1 0 0 0 0
0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 0
0 1 1 1 1 0 1 1 0 0 0 1 0 1 1 0
0 1 1 1 1 0 1 1 0 0 0 1 1 0 1 0
0 1 1 1 1 0 1 1 0 0 0 1 1 1 1 0
0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0
0 1 1 1 1 0 1 1 0 1 0 0 0 1 1 0
0 1 1 1 1 0 1 1 0 1 0 0 1 1 1 0
0 1 1 1 1 0 1 1 0 1 0 1 0 0 0 0
0 1 1 1 1 0 1 1 0 1 0 1 0 0 1 0
0 1 1 1 1 0 1 1 0 1 0 1 0 1 0 0
0 1 1 1 1 0 1 1 0 1 0 1 0 1 1 0
0 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0
0 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0
0 1 1 1 1 0 1 1 1 0 0 0 1 0 0 0
0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0
0 1 1 1 1 0 1 1 1 0 0 0 1 1 1 0
0 1 1 1 1 0 1 1 1 0 0 1 0 0 0 0
0 1 1 1 1 0 1 1 1 0 0 1 0 0 1 0
0 1 1 1 1 0 1 1 1 0 0 1 0 1 1 0
0 1 1 1 1 0 1 1 1 0 0 1 1 0 0 0
0 1 1 1 1 0 1 1 1 0 0 1 1 0 1 0
0 1 1 1 1 0 1 1 1 0 0 1 1 1 1 0
0 1 1 1 1 0 1 1 1 1 0 0 1 1 0 0
0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0
0 1 1 1 1 0 1 1 1 1 0 1 0 0 0 0
0 1 1 1 1 0 1 1 1 1 0 1 0 0 1 0
0 1 1 1 1 0 1 1 1 1 0 1 0 1 0 0
0 1 1 1 1 0 1 1 1 1 0 1 0 1 1 0
0 1 1 1 1 0 1 1 1 1 0 1 1 0 0 0
0 1 1 1 1 0 1 1 1 1 0 1 1 0 1 0
0 1 1 1 1 0 1 1 1 1 0 1 1 1 0 0
0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0



#### Example 6: Warning: F_vector computation takes a long time!!

[ ]:

d = 5

P_dIneqs = polytropeRegionInequalities(d);

P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dF_VECTOR = P_d.F_VECTOR;
P_dRays = P_d.RAYS;

println("The polytrope region P_5 has f_vector: ",P_dF_VECTOR)

println("\n \n")

println("The polytrope region P_5 has rays: ",P_dRays)