# SageMathCell online --> https://sagecell.sagemath.org/?q=qejakn # # Obtained by Rishabh Rajiv (rishabh.rajiv@alumni.ubc.ca -communicated July 4, 2026) # Cayley graph for the semidirect product Z_11 (x45) Z_89 with generators # [0,44 ]<>[0,45 ]:[1,43 ]<>[10,3 ]:[1,52 ]<>[10,74 ]:[1,80 ]<>[10,18 ]:[2,8 ]<>[9,57 ]:[4,14 ]<>[7,43 ]:[4,50 ]<>[7,1 ] # From https://doi.org/10.5281/zenodo.21180071 # you can download the adjacency list, the verifier (standard-library Python), and a paper describing the construction of the graph. # # | Ord.: 979 / Size: 6853 / Diam.: 3 / Avg.dist: 2.78528 / 14-reg.? True / Girth: 5 / Alg.conn. 8.26530 # | Aut.group.ord.: 979 / Cayley ? True --- vtx.trans. ? True -- edge.trans. ? False # distance distrib from vtx. 0: [1, 14, 182, 782] # Number of k-cycles for k=3 up to 5 : [ 0 | 0 | 34265] # import networkx as nx rajiv979 = Graph(r":~?NR`W?A???W?_A_C?M?W@GA?D_I?Y?o@wB_G_O?e@GAgD?J_U?q@_BWE_M_[?}@wCGG?P_a@IAOCwH_S_g@UAgDgJ?V_m@aB?EWK_Y_s@mBWFGM?\_y@yBoFwN__`?AECGGgP?b`EAQC_HWQ_e`KA]CwIGS?h`QAiDOIwT_k_QASDsA_R?n_UA[ECB?S?p_YAcESB_T?r_]AkEcC?U?t_aAsEsC_V?v_eA{FCD?W?x_iBCFSD_X?z_mBKFcE?Y?|_qBSFsE_Z?~_uB[GCF?[@@_yBcGSF_\@B_}BkG_UWO?{AIDiCGNOb@Z`CBwGwVGP_~AODuC_O?c`]`ICCHOVwR@AAUEACwOoe@``OCOHgWgS`DA[EMDOP_f`c`UC[I?XWU@GAaEYDgQOh@f`[CgIWYGV`JAgEeE?R?i`i`aCsIoYwX@MAmEqEWRok@l_?BOI?Zg?_tAaE}?OL_h@o_EB[IW[WA?wAgFI?gMOi`r_KBgIo\GB_zAmFU@?N?k@u_??cFg\w?_I@{Fa?OAo^`x_E?oG?]gA?LAAFm?gB_`@{_K?{GW^WB_OAGFy@?COa`~_Q@GGo_GD?RAMGE@WD?cAA_W@SHG_wE_UASGQ@oDodaD_]@_H_UPBOO?qCsJO`wG_YA[DkPCC_L`NAwGeAWF?g@\CT@OBgSOnAJ_i@wIOVpEOU?}DKK?bWJ__AgECPsE?O`TBCG}BGG_j@bC`@gCWToqAP_uAOJ?XPHO??wASKocw?_\@KE[Qc?_N?fBOHU?WFoS@hCl?OC?IOtAV_IACDOYpKOE@CAkL_eWB_b@WEsRSA?Q?lB[HmIG[@DAWacFCPWeWh`qCWHiI_[pEaZaiFOPofGj@tC]HuIw\`GA]aoF[QGfw?@wCcIA?G]PHa`_CFgQ_gg@`zCiIKUS@?}AUDGJM?g^PJadDh?WNoe@RAt_MF{RGhpZOGC?HgT?lwCa@CuIcVCA`@A[DSJe@W_pMajDt?oO_f`UAz_YGSRwjP]OMCKI?TonWFaFDAI{VsC@CAaD_J}AGaPPapE@@GJGa`QB@_eDgPWhP`OSAuGoSoowI`[CYI[WcD_maMDOKUAwV`FahEL@_Jwc@TBF_qE?QGipcOYBAHGT_qWL`aCeIsXSF?paSD[KmBgX@IanEX@wKgd`WBL_}EWQwkPfO_AqE[R?rwO`YBOHcYCG_l`hCsLECWV?tAZEdAOJgYpMBR`IDwL_fPiOeA}EsRotWR`_B[H{YsI?o`nD?L]DGW_wA`EpAgKW[PPBX`UEOMOgplOkBIFKS_uwU`eBgISZcJ_r`tDKLuDwY?zAfE|B?LG\pSB^`aEgN?iPoOqBUFcTOwWX`kBsIk[SL?u`zDWMMEgZ_}AlFHBWLw^PVBd`mF?NojprOwBaF{U?xw[`qC?JC\CM_k`rCAMeFWU_yAAFTBoJW\P@bj`yDoMo`@uO}AyF[OgzW^`]BoGW\sO?n`xCMM}GGW?|AGF`CGKG]pCbpaEEGN_a`xPCBEFsPW{wa`cB{Go]cP_q`~CYJG]kPorA?C[JK]sQ?ra@C]JO]{QOsAAC_JS^CQ_saBCaJW^KQotACCcJ[^SR?taDCeJ_^[ROuAECgJc^cR_uaFCiJg^kRovAGCkJk^sS?vaHCmJo^{j`tBvF|I{\W}@~qoFWNc_CkPubyGBDc\o}q@PYF]No_[UpwB|GHDo]G~aAp\FcN{_sV`xc?GND{]`?QCP_FiOG`KWPzCBGTEGUO|qAPbDeN__kX@YBxGLESUg}aBpeDkNk`CXpZb{GRE_V?~QDPhDcJc^sY`XayF~EkU_mq?PkDiJo_KZPZA|GDEwUwna@pnDoJ{_c[@[b?GJFCVOoQBPqDuKG_{[p]BBGPFOVgpACptD{KS`S\`XA~ELF[UWo@bpwDgKCXC]PYbAERFgUoopdPzDmKOX[^@[BDEWOmNgmPbBLGXFwVOppfCLb}JkX?rqFQ?DwKcY@Bx?a|ESLCaC_`^BJEcPEOWnpeBRGdGOW?rPiCRcIKCXotQIQEECK{YpDXBbBE_L[`XDhCBCEaL_``DxCbDEcLc`hEHDBEEeLg`pEXDbFEgLk`xEhEBGEiLoa@ExEbHEkLsaHFHFBIEmLwaPFXFbJEoL{aXFhGBKEqM?a`FxGbLEsMCahGHHBMEuMGapGXHbNEwMKaxGhIBOEyMOb@GxIbPE{MSbHHHJBQE}MWbPHXJbRF?M[bXHhKBSFAM_b`HxKbTFCMcbhIHLBUFEMgbpIXLbVFGMkbxIhMBWFIMoc@IxMbXFKMscHJHNBYFMMwcPJXNbZFOM{cXJhOB[FQN?c`JxOb\FSNCchKHPB]FUNGcpKXPb^FWNKcxKhQB_FYNOd@KxQb`F[NSdHLHRBaF]NWdPLXRbbF_N[dXLhSBcFaN_d`LxSbdFcNcdhMHTBeFeNgdpMXTbfFgNkdxMhUBgFiNoe@MxUbhFkNseHNGR`JGQQ[eHUgS@KGSQ_ePUwS`LDcQceXVGT@MDeQge`VWT`NDgQkehVgU@ODiQoepVwU`PDkQsexWGV@QDmQwf@WWV`RDoQ{fHWgW@SDqR?fPWwW`TDsOkeHMwX@UDuOoePNGX`VDwOseXNWY@WDyOwe`Ng??tD{O{ehNw?_uD}P?epOG@?vE?PCexOW@_wEAPGf@OgA?xECPKfHOwA_yEEPOfPPGB?zEGPSfXPWB_{EIPWf`PgC?|EKP[fhPwC_}EMP_fpQGD?~EOPcfxQWD`?EQPgg@QaqOKAAKgbXOQddd_YCGXXFA`DKJL?wGWrAMdBIYU]@wP@ec]IGSwlCC?abMG}SShxYWG`EE]Q?gpSAtOQAML?cHPqgdj_eC_YHGacDQJX@OHGsaPdHIeUuAgQ`hccISTOlsD_dbSHISkihZwJ`KEiQWh`TawOWAYLWcxRQjdp_qCwYxIAfDWJd@gHwuASdNIqVMBWS@kciI_TgmcF?gbYHUTCjX\WM`QEuQoiPVAzO]AeLodhSqmdv_}DOZhJaiD]JpA?IgvaVdTI}VeCGT`ncoIkU?nSG_jb_HaT[kH]wP`WFARGj@Wa}O?@GMGeXUQpd|_AAS[XAqYDYJ|?GCoxAECtIuV}?WHpqcLHkTooC@?SBeG[R[jh_WA_hFMO{f@Vb@OE@SM_a@MQneB_MAk\HCQ\D_KH?_D_yaHCzJAWU@GJPtcRHwUGosA_VBkGgRskX`wD_nFYOkahNbCOK@_Mw``Da^eH_YBC\xBQJd?KT?wEO{AFCWIAUOp[BoXbpG]PcgPXREOO@gNGa@Ea`deKZ@CEg{qGcZIGU[psC_ZBsGcPoghYBFoR@mNSaXFQbDhK`@OF?|aIC]IMUgqKDO[bvGiP{h@YrHOU@sN_apGAcdkKf@[FW}QJc`ISUsqcE?]ByGoQGhXZbIoX@yNkbHGqeDnKl@gFo~ALCcIYV?q{Eo^b|GuQShp[RKO[A?Nwb`HafdqKr@sGG~qMcfI_VKrSF_`C?G{Q_iH\BLo^AEOCbxIQhDtKxA?G`?aOCiIeVWrkGOacBHAQki`\rNOaAKOOcPJAidwK~AKGx@QPclIkVcsCH?cCEHGQwix]bOodAQO[chJqkDzLDAWHPAARCoIqVos[ePTdbJcV[vCe`UCJJeV_vKepUcKJgVcvSf@VCLJiVgv[fPVcMJkVkvcf`WCNJGV[ncfpWcOJIV_nkUPOCPJKVcnsU`OcQJMVgn{UpPCRJOVkoCV@PcSJQVooKVPQCTJSVsoSV`QcUJUVwo[VpRCVJWV{ocW@RcWJYW?okWPSCXJ[WCosW`ScYJ]WGo{WpTCZJ_WKpCX@Tc[JaWOpKXPUC\JcWSpSX`Uc]JeWWp[XpVC^JgW[pcY@Vc_JiW_pkYPWC`JkWcpsY`WcaJmWgp{UOtcbJoWkqCU_uCcJqWoqKUoucdJsWsqSV?vCeJuWwq[VOvcfJwW{qcV_wCgJyX?qkVowchJ{XCqsW?xCiJ}XGqxnWo`rHUW?qXeB^PaBgQooHdBKe~bEFSdh_bIeYM@EOMpJb@eUKu[EKg\qVeCKmXowSX_{CoKIX_rhowr`xHaWWrHfbaPgBsRGoxebNfDbQFkeXaBLe_MLEgN`LBCe[LA[]LW^QYeIKyYGxCZ?~CuKUXwsXqWu`~HmWorxhBdPmC?R_phgBQfJb]GCfHbbOeeMXF?OPMbFeaLM[uMG_q\eOLEY_xs[`AC{KaYOtHrwxaDHyXGshibgPsCKRwqXhbTfPbiG[fxdBRekMdFWP@OBIegLY\MMwaQ_eULQYwyc]@DDAKmYgtxtW{aJIEX_tXkB]fUbsGog`eRUEpL{\]NWbQaeYLYZGvxuG}AMIKXktpkr_FXbyG{gxfBVesMA\iNocAcE\L_ZSwPuw~aPIQXwuHlb`f[c?HGhPfrXEvMG\uOGcqde_LeZ_whvh@ASIWYCu`mRbF^cEHShhgbYeyMM]AO_dafEbLkZkx@wXAaVI]YOuxnBcfacKH_i@XBQewMS]MOweQgddLKZcxXxHCAYIcUWsxmbeFdcQHkiXXrSEzMY]YPOfAiDgLQZoxpxxDa\IiUOlHibffgcWHwipXQtEjM_]ePgfqjdeJUYoyHyhFA_IoU[l`jRhFjc]ICjHYAuemMe]qQ?galDhJ[Y{y`zXGabIuUglxkBifmccIOj`YqwEpMk]}QWhQmdkJaZGyx{HIAeI{UsmPkrkFpciI[jxZaxesMq^IQoiAoDnJgZSzP{xJahJAV?mhlblfscoIgkP[QzEvMw^UYOurGFCNM^MYWvBGfDNO^QY_vRHFENQ^UYgvbHfFNS^YYovrIFGNU^]YwwBIfHNW^aZ?wRJFINY^eZGwbJfJN[^iZOwrKFKN]^mZWxBKfLN_^qZ_xRLFMNa^uZgxbLfNNc^yZoxrMFONe^}ZwyBMfPNg_A[?yRNFQNi_E[GybNfRNk_I[OyrOFSNm_LAswpuE`Mi^`?aDxqBlLC\W~I@SKRdF[YKyx}cBGXfKM{s`uB|gFOtM[]@hRkf{OO`m\?{RRFYNy_dBcyPxEfMu^x@QFXtBrLO\o~yAsNRjFgYczi?CEG^fWNStPvc?gLP@Ms]pirngAO[aE\o|rUF_OE_|CSzp{ElNA_PAAGxwBxL[]H?iCSQRpFsY{{Y@cHGdfcNku@xCBgRPLNK^`kRqgGOga]]_~RXFeOQ`TDC|P~ErLy]\@QIXzB~LgZw|AAsTRvG?ZSvxySEGjfoOCupoBtGLPXNc_Plr_fjO[au^P?r[FANW_|Ds}qAExME]tAAJx}CDLs[O|qCSWR|GKZkwhzsHGpf{O[v`pbwGRPdN{`@XBbfpOgbM_@AQqfGNc`TEd?QDDeLy[c}YLXXCAJMZwxP|CZQrGEU_vxqrygvdgOOlHoBeFuPpJS_hYb_fLNmbeUp@atfAM[^`FSlqBdkME[{~IMx[CGJY[Oy@}c]QxGQUwwhsR|g|dsOglxpbhF{P|JGVX[BbfRNyb}UWnAwfGMg^xGCl@]dqMQ\S~yOXYa}Je[gyq?C`QuD}VOxXts?hBdmK?mhrBkGAQHJ_WH\befXOEcUVGoazfMMs_PGsm``dwM]\l?iPx\bCJq\?za@ccQ{EIVgyHvSBhHdyKWnXsbnGGQTJwWx^Bhf^OQcmVwqA}fSN?_hHco@cd}Mi]D@YRX_bIJ}\W{QBCfRAEUW?yxwsEgUQ^KKX`_RkFcO[`\ICp@eeAMq]T@yECgrDE[WKzPxcGGXQdKWXx`BlffOa`hI[ppgEDMw]`AQEsiRGEaWWzhySHg[QjKcYP`rnFiOg`tIsq`heGM}]lAiFcjrJEgWcvhwBuG^QpKoYhab^F`NYa@JKrPjEJL}]G|qGSlRMEmWow@wrvgaQvK{Z@bR_fcN_aLJcs@keMMC]S}IHCmrPEsW{wXxbxGdQ|AwJ@EqeFRPUbDGs??Vc[IY\PDaKcbo@@_PshptSUgrQP?GEHFaffUP[bPHK?oXC^I_\\DyLSdOC@eQ?iHuCWGuQV?SE`GQhFXPab\Hc@_YcaIe\hEQMCeoF@kQKi`usXgxQ[e}@?LqQDTMwbPFQRswOH@oQSipvSYgzQ_fE@OMQRDVM{bXFaSSxOJ@sQ[j@vsZg|QcfM@_MqSDXN?b`FqSsyOL@wQcjPwS[g~QgfU@oNQTDZNCbhGATSzON@{Qkj`ws\h@Qkf]A?NqUD\NGbpGQTs{OPA?QsjpxS]hBQofeAOOQVD^NKbxGaUS|ORACQ{k@xs^hDQsfmA_OqWD`NOc@GqUs}OTAGRCkPyS_hFQwfuAoPQXDbNScHHAVS~OVAKOkeXys`hHQ{f}B?PqECsNWcPHQVt?OXAOOsehzSahJR?gEBOQQFCuN[cXHaWT@OZASO{exzsbhLRCgMB_QqGCwN_c`HqWtAO\AWPCfH{SchNRGgUBoRQHCyNcchIAXTBO^A[PKfX{sdhPRKg]C?RqIC{NgcpIQXtCO`A_PSfh|SehRROgeCOSQJC}NkcxIaYTDObAcP[fx|sfhTRSgmC_SqKD?Nod@IqYtEOdAgPcgH}SghVRWguCoTQLDANsdHJAZTFOfAkPkgX}shhXR[g}D?TqMDCNw`XIaUdGOhAoPsgh~SJhTQuhE??IaNDEN{``IqVDHO@@UP{gx~sKhVQyhM?OJAODGO?`hJAVdIOB@YQChI?SLhXQ}hU?_JaPDIOC`pJQWDJOD@]QKhY?sMhZRAh]?oKAQDKOG`xJaWdKOF@aQShi@SNh\REhe@?KaRDMOKa@JqXDLOH@eQ[hy@sOh^RIhm@OLASDOOOaHKAXdMOJ@iQciIASPh`RMhu@_LaTDQOSaPKQYDNOL@mQkiYAsQhbRQh}@oMAUDSOWaXKaYdOON@qQsiiBSRhdRUiEA?MaVDUO[a`KqZDPOP@uQ{iyBsShfRYiMAONAWDWO_ahLAZdQOR@yRCjICSJGjRQiUA_NaXDYOc`\DaYdROT@}RKjYCsKGlRUi]AoOAYD[Og`dDqZDSOVAARSjiDSLGnRYieB?OaZD]Ly`lEAZdTOXAER[jxncJG[PaimBOPA[D_L}`\BiKdUOZAIRckHoCKG]PeiuB_Pa\DaMA`dByLDVO\AMRkkXocLG_Pii}BoQADc{ME`lCILdWO^AQOofhpCMGaPmjEC?QaEc}MI`tCYMDXO`AUOwfxpcNGcPqjMCORAFd?MM`|CiMdYObAYP?gHqCOGePujUC_RaGdAMQaDCyNDZOdA]PGgXqcPGgPyj]CoSAHdCMUaLDINcviw`MDCa`PReGcPSb|MAmWS@QGiSWxiHSTh?RajiDGSqJDFM[aXDaOSxIz`SDOaxQBfgfPYcHMYnGT`TGoScyAICVHBRgjuD_TaKdIMaadDyPCyi}`YD[bPQrhGiP_cTMqnwwADJWZDCI`tRIhbaGWlhkcPIGTMiiMO`qvErPEgdTAiwxaGJ]ZPCaadSikbgGcm@lSQiJTSitXC\PDDpLkaXPaitVJHbkGkmPlsRiLTWi|XS\pEDrLoa`PqjTWJJboGsm`mSSiNT[jDXc]PFDtLsahQAjtXJLbsG{mpmsTiPT_jLXs]pGDvLwapQQkTYJNbwHCk`]CUiRTcjTYC^PHDdJqaxQaktZJPb{HKkp]cViTTgj\YS^pIDfJub@QqlT[JRc?HSl@^CWiVTkjdYc_PJDhJybHRAlt\JTcCH[lP^cXiXTojlYs_pKDjJ}bPRQmT]JVcGHcl`_CYiZTsjtZC`PLDlKAbXRamt^JXcKHklp_cZi\Twj|ZS`pMDnKEb`RqnT_JZcOHsm@`C[i^T{kDZcaPNDpKIbhSAnt`J\cSH{mP`c\i`U?kLZsapODrKMbpSQoTaJ^cWICm`aC]ibUCkT[CbPPDtKQbxSaotbJ`c[IKmpac^idUGk\[SbpQDvKUc@Lyhdajbc_ISn@bC_hoTMkX[ccPRDxKYcHMIiDbjdccI[nPbc`hnRcid[scpSDzK]cPMA[tTJfcgIcn`cCahpRgil\CdPTD|KacXMQ\TUJhckIknpccbhrRkit\SdpUD~Kec`Ma\tVJjcoIso@dCchtRoi|\cePVE@KichMq]TWJlcsI{oPdcdhvRsjD\sepWEBKmcpNA]tXJncwJCo`eCehxRwjL]CUPMeDKqcxNQ^TYJpasHwopecfhzR{jT]SUpNeFKud@Na^tZJrawI?p@fCgh|S?j\]cVPOeHKydHNq_T[Jta{IGpPfchh~SCjd]sVpPeJK}dPOA_t\Jvb?IOp`gCii@SGjl^CWPQeLLAdXOQ`T]JxbCIWppgcjiBSKjt^SWpReNLEd`Oa`t^JzbGI_q@hCkiDSOj|^cXPSePLIdhOqaT_J|bKIgqPhcliFSSkD^sXpTeRLMdpPAat`J~bOIoq`iCmiHSWkL_CYPUeTLQdxPQbTaK@bSIwqpicniJS[kT_SYpVeVLUe@PabtbKBbWJ?r@jCoiLS_k\_cZPWeXLYeHLybdGkDaqEwrPjcphoS]hH_sU_veZL]ePMIcDHkFauF?r`kCqhqSahP`CV?we\LaeXMYcdIkHayFGrpkcrhsSehX`SV_xe^Lee`MidDJkJa}FOs@lCshuSih``cW?ye`LiehMyddKkLbAFWsPlcthwSmhh`sW_zebLmepNIeDLkNbEF_s`mCuhySqhpaCX?{edLqexNYedMkPbIFgspmcJH{SuhxaSX_|efLu`\NifDNkRbMFot@nCKH}Syi@acY?}dcLQ`dNyfdOkTbQFwkhicLI?S}iHasY_~deLU`lOIgDPkVbUG?kxjCMIATAiPbCZ@?dgLY`tOYgdQjGWrEsOPYRVG]SGiLSqqULPmCEUgtyFtAicTMkhb[ZpADjL_a@OqhTSJJWxA?X?yb_gOTAlP[jCGObHFU[HAIgdijeWbAGXOzB`gQTElX[zCeOobEUMswaCtQJVVOpLcSH@eBmMI`PSiuDskSXFASXgzrbGTTKld\RDUQOeE[N?vhptRjYVUpXckHpfbpL{[`TAutuKVXLA_Y?{b^fHTQlp\jEERohEaNKw@qdTJ\V[pddCI`hBsMA[lTYvdvkYXRAkYW|R`FKTWl|]BEuTOkEgNWwXrTUj_Vappd[JPibvMG[xTqwTxK\XXAwYo}BafNT]mH]ZFeUonEmNcwpsDWJbVgp|dsK@kByMM\DUIxDyk_X^BCZG}rcFQTck`[i|eWOqEsNoxHstXjHVKn\eKKplb|MS\PUaqdrjwXdBOZ_~bdfTTikl\A}UXotEyN{x`tdZJKVQnhecL`nC?MY\\UyrTtJzXjB[Zx?RfFWTokx\Y~EZOwF?OGxxuT[jNVWnte{MPocBM_\hVQsDuj}XpBg[P@BgfZTulD\q~u[ozFEOSyPvD]JQV]o@fSN@qCEMe\tVistwK@XvBs[h@riF]T{lP]J?e]O}FKO_yhvt^jTVcoLfkNprcHMk]@WAtdxkCX|C?\@Abjf`UAl\]b@U^p@DcMcz@wd`JWVioXgCO`XbiMq]LWYuTzKFYBCKU_yrlFcUGlh]zAE`PCDiMozXxTajZVoodg[PPZBlMw]XWqvD{kIYHCWUwzbmffUMlt^RAuapFDoM{zpyCvj]VuopgsQ@[boM}]dMAvt}KLYNCcVO{RoFiRam@^jBecPIDuNG{HysxJ`V{o|hKQp]BrNC]pMYwd~kOYTCoVg|BpflRgmL_BCUdpLD{NS{`zcyjcWApHhcR`^buNI]|MqxU@KRYZC{W?|rrFoRmmX_ZDEfPOEAN_{x{S{JfWGpTh{SP`BxNO^HNIyEAkUY`DGWW}bsfrRsmd_rDugpREGNk|P|C|jiWMp`iST@ab{NU^TNayuCKXYfDSWo~RuFuRymp`JEeiPUEMNw|h|s~JlWSplikTpcB~N[^`NyzeDk[YlD_XH?BvfxS?m|`bFUjo?ESOC}@}d?joWYpxjC?PdcANa^lOQ{UFK^Yr?GX`?rxF{SEnH`zGElOBEYOO}X~TAJGVep@j[@@fCDNg^xOiqTyKPYx?SXx@byf~SKkh]jCemoEE_O[}q?DBjJVkpLjs@pgcGNm_DPArDzkSY~?_YPAR{GASQkt^BDUoOHEeOg~I?tDJMVqpXkKA`XBSNs_PPYrt|KVZD?kUWtR|gDSWl@^ZEEpoKDgLW~a@dEjPVwpdkcBPYbVNy_\Pqsd}kYZJ?wUouB~GGS]lL^rEurONDmLc~yATGJSV}ppk{C@[BYO?_hQItU?K\ZP@CVGus?gJSclX_JFesoQDsLp?QBDHjVWCp|lSCp\b\OE_tQauE@k_ZV@OV_vcAGMSik`ZJ@EuOTDyL|?iBtJJHUsoTlkD`^B_OK`@QyqdlkEZ\@[VwwSBgPSoklZb@uvoWE?MH@ACdKjKUyo`mCEP_bbOQ`LRQrTnKHZb@gWOxCDGSSukxZzAexOZEEMT@YDTMJNV?olm[F@aBeLy_pRisDokKZh@sWgxr^GLS{lD[RBUyo]EKM_vyBdNjQVEoxcJ\gNbFFQ[@@ygDhjcW]qHm{Bob`UBQPWcyECuJ`XMsTjcC?c@VBSP[dAESujaXOsXjj]gG`HAoEkb@ISLHmVEqdgzVe|o??cCgL`EQTGUOumPdRQEnl{_A@KHWZQLCjOm`p[jIucl_Zz?GA_R?vCZHW``BixeULIZAvy?WDOe`nGwQtBIFdrklYUuHn{@?J@MB_PsdqEcNjgX[spkZ_GA_VA]FCbpJsLg_VQq|hjXF?oE?oD?MPFqWG[PAmheBReqmA_M@cIG[qOCpOyaH\ZKUfle[F?_BOS_yC`Hc`xCYzEXLOZMwQ@GEoh`tHCRLByHDukrYau`okA_M@SBkQKeaGCQjmXgtHlJ`gD_\AiF[c`LSOgeV]rTiZYfBoK?{DWN@HQZGaPMn@erTEtmG_Y@{Iw]QRCvPEa`]JLuilk[R?wC?U?|CfHoaPDI{e[LUZYwi??BoO`zHORdCiIdxkxYmuxp[?OG?aBwQcfQHcTjsXst`lzbG@?P@EFsdPMsRgkVirljJ[FEoB?cAONpIq]GgPYnXfbUewmM_G@KCg^qUC|PQax]zNUllq[^?SA_H`?ClH{ahDy}E^L[ZexA?oDORa@H[R|DYKD{k~YyvPqK@oJ?gCCQ{gAJCWjyY?txmjcgC?V@QGKe@OSUgqVusDjz\fHoH?oAgO`KQ`GmPenpgRWEzmS_S@cDW`QXDBP]bP^jOuolw[j?kBOJ@BCrIGb@Ei~eaLaZqxY@_EoUaFHgSTEILd~k`YIuLq{BOM?mCORSgqKcZk?XCsXkbeGF?\@]GcepPsXgwWAqLgzXVKoN?{B?PPLqcGsPqoHcbQErMY__@{EGaq[DHPibh_ZHUclf[v@CC?K`ECxISbXFZ@ERLIZOxqAOGOXaLHsSlEyNEAkfYUudrkCoP?sC[RkhaMC]kEXOsplRfgI?b@iG{f`RS[g}WMqdhjYvNoT@GBWQ@NQfGyP}o`dRReuM__kASEwcQ^DNPuc@`JIufll\B@[CoM@HC~I_bpGJAeULOZ[yIB?Ho[aRI?TDFiOeDklYau|s[EOS?yCgSCiQNc`kKX[tHmBhGL?h@uHSgPSs^hCWYq|iZ[VQoZ@SBoQpOqiH?QIoxeBTExMe_wAkFgdqaDTQAcX`zKUilr\N@sD_N`KDDIkcHGzCEXLUZgyaBoJO^aXIKT\GYQEGkrYmvTtKFoV@?CsS[jAPCckQXgt`mrigO?nAAHkh@USahIWerTjJ\vTo`@_CGR`QQlHEQUpPerUe{Mk`CBCGWfQdDZQMcpajLullx\ZAKEOP@NDJIwc`HjDeOkwYwyyC_Koaa^IWTtHIReJkaXqttt{HOY@ED?SsjqQcfkWXErhjrkGR?tAMIChpVsdhOWqqPfZVvWof@kC_SPRqoHKQaphcjNEoMq`OB[HGgqgD`QYdHbZHe]l`\fAcF?Q`QDPJCcxIZFERk}ZCzQDOMOdadIcULHyTEMkgX}uLukIo\@KDKOkiYSCik]XQs@kblgU?zAYI[``TCghUW}qhgJXVZol@wCwT@BQihQQmq@dZOerMw`[BsHwiQFDUQed`XBJE`lf\rA{FoS@TCNImdPJIqUUlCZOziE?NogajG_T`IiUddKmYIudv[KO_@QDWPCjITcljJX]sXlRnGX@@AeIsaPUcjh[UWr@gzYv]orACDOTpCqlhWQykteJQEuM}`gCKIgjqID[QqdxXrKecll\~BSG_T`WCTIydhJyruXlIZ[{AEoPOjapGkTxJYWDgKsYUu|wKLob@WAqP[jyVCojPXispmBog??wAMDgb@WCmhaUcrXhj[V`o@@qC_JXEQoh]RElLezRexNC_CBgHGVALDaQ}ePYbMEflr]J?KFWQ_mcZJEe@KitU[lOZg{Y?_N?d`]GUPpKIXdjKyYavTw{@O]`KA}OobiWcrjVXutHmrqGB?}AYE?`hFcphgUorpiZ\vcoF@}CwKHBaNhcRQldfjTE{NI_OC?HwWaFc_RIehZRNeilx]V?cGGS?pcOHAeXLYuuOk~Yk{q@OO_g`cGaQHKyZDmKaY?t\xkAo``QBIPGcYYCuj\XEsDjBrgE@CAeEWaXHCshmU{qPgRUVfoLAIDOKxDAQgURSl|cjOulNO_[CWIgYAIceOmel[BHeaLZZs|F") rajiv979nx = rajiv979.networkx_graph() # List of graphs to process graphs = [ ('rajiv979 ', rajiv979)] def count_k_cycles(G, k): count = 0 visited = set() def dfs(path, start, depth): nonlocal count current = path[-1] # Early exit if we?re going too deep if depth == k: if start in G.neighbors(current): # Normalize to avoid duplicates cycle = tuple(sorted(path)) if cycle not in visited: visited.add(cycle) count += 1 return for neighbor in G.neighbors(current): if neighbor not in path and neighbor >= start: dfs(path + [neighbor], start, depth + 1) for v in G.vertices(): dfs([v], v, 1) return count # each cycle counted twice (once forward, once reverse) def algebraic_connectivity(G): """ Compute the algebraic connectivity (Fiedler value) of a graph G. INPUT: - G: a SageMath Graph OUTPUT: - The second-smallest eigenvalue of the Laplacian matrix of G """ L = G.laplacian_matrix() eigenvalues = L.eigenvalues() eigenvalues.sort() if len(eigenvalues) < 2: return 0 # Trivial case: empty or isolated vertex graph return eigenvalues[1] def check_all_isomorphisms(graph_list): n = len(graph_list) print("\n Isomorphism check of all pairs (a dot means the pair ARE isomorphic):") for i in range(n): label_i, G_i = graph_list[i] for j in range(i + 1, n): label_j, G_j = graph_list[j] if G_i.is_isomorphic(G_j): # print(".", end="") print(f"{label_i} IS isomorphic to {label_j}") else: print(f"{label_i} NOT isomorphic to {label_j}") def non_isomorphic(graph_list): reps = [] labels = [] for label, G in graph_list: if not any(G.is_isomorphic(H) for _, H in reps): reps.append((label, G)) labels.append(label.strip()) # remove extra spaces if you want return labels def isomorphic(graph_list): labels = [] for i, (label, G) in enumerate(graph_list): if any(i != j and G.is_isomorphic(H) for j, (_, H) in enumerate(graph_list)): labels.append(label.strip()) return labels def compare_graphs(graphs): canon = {} for label, G in graphs: s6 = G.canonical_label().sparse6_string() canon.setdefault(s6, []).append(label.strip()) for group in canon.values(): if len(group) > 1: print("Isomorphic :", ", ".join(group)) else: print("Unique :", group[0]) def compare_graphs_list(graphs): canon = {} count =1 for label, G in graphs: s6 = G.canonical_label().sparse6_string() # print(f"{label.strip():15} : {s6[:40]}...") canon.setdefault(s6, []).append(label.strip()) print("\n noniso ->",len(canon)) print("\nGroups:") for group in canon.values(): if len(group) > 1: print(count,"Isomorphic :", ", ".join(group)) count=count+1 else: print(count,"Unique :", group[0]) count=count+1 print("\n START \n") # Check isomorphisms compare_graphs_list(graphs) #noniso = non_isomorphic(graphs) #print(len(noniso), " non-isomorphic -> ",noniso) #iso=isomorphic(graphs) #print(len(iso), " isomorphic -> ",iso,"\n") #check_all_isomorphisms(nonisographs) twographs = [ ] nonisographs = graphs # Print properties for each graph in the list print("\n Main properties of the graph\n") for label, graph in nonisographs: print(f"{label} | Ord.: {graph.order()} / Size: {graph.size()} / Diam.: {graph.diameter()} / Avg.dist: {graph.average_distance().n(digits=6)} / 14-reg.? {graph.is_regular(k=14)} / Girth: {graph.girth()} ")# / Alg.conn. {algebraic_connectivity(graph).n(digits=6)} / Domin. number: {graph.dominating_set(value_only=True)} ") print("\n Symmetry properties of the graph\n") for label, graph in nonisographs: print(f"{label} | Aut.group.ord.: {graph.automorphism_group().order()} / Cayley ? {graph.is_cayley()} --- vtx.trans. ? {graph.is_vertex_transitive()} -- edge.trans. ? {graph.is_edge_transitive()}" ) ''' print("\n Properties of the graphs as at arXiv\n") for label, graph in nonisographs: print(f"{label} & {graph.average_distance().n(digits=6)} & {graph.girth()} & {algebraic_connectivity(graph).n(digits=6)} & {graph.automorphism_group().order()} & {graph.is_edge_transitive()} \\\\ ") # print(f"{label} & {graph.average_distance().n(digits=6)} & {graph.girth()} & {algebraic_connectivity(graph).n(digits=6)} & {domination_number_cayley(graph,solver= None)} & {graph.automorphism_group().order()} \\\\ ") ''' # Compute the distance distribution from a given vertex v in graph G # Returns a list where the i-th element is the number of vertices at distance i from v def distance_distribution(G, v): from collections import Counter distances = G.shortest_path_lengths(v) distribution = Counter(distances.values()) result = [distribution[d] for d in sorted(distribution)] return result print("\n") for label, graph in nonisographs: print(f"{label} distance distrib from vtx. 0: {distance_distribution(graph, 0)}") print("\n") ''' print("\n") print("\nChecking throught the spectrum that P216x4719 and P216x2202 are NON-isomorphic\n ") for label, graph in twographs: spec = [ev.n(digits=4) for ev in graph.spectrum()[:20]] print(f"{label} spectrum (first 20): {spec}") ''' # Counting k-cycles for each graph print("\nNumber of k-cycles for k=3 up to 6") for label, graph in nonisographs: print(f"{label} ", " | ".join(str(count_k_cycles(graph, k)) for k in range(3, 7))) #nx.write_adjlist(MC216nx,"MC216_adjlist.txt") #nx.write_adjlist(SG216x90nx,"SG216x90_adjlist.txt") #nx.write_adjlist(SG216x158nx,SG216x15_adjlist.txt") ''' # from 0 versio Molodtsov  for name, G in nonisographs: fname = name.strip() + "_adjlst.txt" s = "; ".join( "{}-{}".format(v, ",".join(map(str, G.neighbors(v)))) if G.neighbors(v) else str(v) for v in G.vertices(sort=True) ) with open(fname, "w") as f: f.write(s) # from 0 for label, _ in nonisographs: base = label.strip() G = globals()[base + "nx"] with open(f"{base}_edges.txt", "w") as f: f.write(",".join( f"{{{u},{v}}}" for u, v in sorted((min(u, v), max(u, v)) for u, v in G.edges()) )) ''' # from 1 for label, _ in nonisographs: base = label.strip() G = globals()[base + "nx"] with open(f"{base}_Zedges.txt", "w") as f: f.write(",".join( f"{{{u+1},{v+1}}}" for u, v in sorted((min(u, v), max(u, v)) for u, v in G.edges()) )) print("\n done") ##