# usage MyChain(group) or MyChain(group,base) MyChain:=function(arg) local G,c,d,i,s,t,g; G:=arg[1]; if Length(arg)=1 then c:=StabChain(G); else c:=StabChain(G,rec(base:=arg[2])); fi; d:=rec(generators:=GeneratorsOfGroup(G)); t:=d; while Length(c.generators)>0 do d.orbit:=[c.orbit[1]]; d.transversal:=[]; d.transversal[c.orbit[1]]:=(); i:=1; while i<=Length(d.orbit) do for g in d.generators do s:=d.orbit[i]^g; if not s in d.orbit then Add(d.orbit,s); d.transversal[s]:=d.transversal[d.orbit[i]]*g; fi; od; i:=i+1; od; s:=d; c:=c.stabilizer; d:=rec(generators:=c.generators); s.stabilizer:=d; od; return t; end;