"Source: Text/Incidence/IncidenceGeometry.text";
"Line: 212";
"Date: Fri Sep 26 12:10:10 2025";
"Main: Fri Sep 26 14:29:19 2025";
// original file: Text/Incidence/IncidenceGeometry.text, line: 212
// Example: H155E4 ()
print "Example: H155E4";
ei := GetEchoInput();
SetEchoInput(true);
HoffmanSingletonGraph := function()
  pentagram := Graph< 5 | { {1,3}, {3,5}, {5,2}, {2,4}, {4,1} } >;
  pentagon := PolygonGraph(5);
  PP := pentagram join pentagon;
  HS := &join [ PP : i in [1..5] ];
  return HS + { { Vertices(HS) | i + j*10, k*10 + 6 + (i+j*k) mod 5 } : 
                                i in [1..5], j in [0..4], k in [0..4] };
end function;
gr := HoffmanSingletonGraph();
ig := IncidenceGeometry(gr);
aut := AutomorphismGroup(ig);
n := NormalSubgroups(aut);
X1 := VertexSet(gr);
g := CompleteGraph(50);
e := EdgeSet(gr);
ebis := [];
for x in EdgeSet(gr) do
    for i := 1 to 50 do
        for j := i+1 to 50 do
            if VertexSet(gr)!i in x then
                if VertexSet(gr)!j in x then
                    Append(~ebis,[i,j]);
                end if;
            end if;
        end for;
    end for;
end for;
for i := 1 to #ebis do
    RemoveEdge(~g,ebis[i][1],ebis[i][2]);
end for;
c := MaximumClique(g);
cbis := [];
for i := 1 to 50 do
    if (VertexSet(gr)!i in c) then Append(~cbis,i); end if;
end for;
c := Set(cbis);
X2 := Orbit(n[2]`subgroup,c);
X2 := SetToSequence(X2);
e := [];
for i := 1 to 50 do
    for j := 1 to 50 do
        if X1!i in Neighbours(X1!j) then Append(~e,{i,j+50}); end if;
    end for;
end for;
for i :=1 to 50 do
    for j := 1 to 50 do
        if not(i in X2[j]) then Append(~e,{i,j+100});end if;
    end for;
end for;
for i :=1 to 50 do
    for j := 1 to 50 do
        if i in  X2[j] then Append(~e,{i,j+150});end if;
    end for;
end for;
for i :=1 to 50 do
    for j := 1 to 50 do
        if i in  X2[j] then Append(~e,{i+50,j+100});end if;
    end for;
end for;
for i :=1 to 50 do
    for j := 1 to 50 do
        if not(i in  X2[j]) then Append(~e,{i+50,j+150});end if;
    end for;
end for;
for i :=1 to 50 do
    for j := 1 to 50 do
        if X2[i] meet X2[j] eq {} then Append(~e,{i+100,j+150});end if;
    end for;
end for;
gr2 := Graph<200|Set(e)>;
v := VertexSet(gr2);
labs := [i: j in {1..50}, i in {1..4}];
AssignLabels(v,labs);
neumaier := IncidenceGeometry(gr2);
SetEchoInput(ei);
