// Code written by Andy Huchala based on a joint program written with Jonathan Lee. // This program computes the list of dimensions for which there exist multiple non-isomorphic // irreducible E7 representations; see OEIS A339251. // This is a 128-bit implementation, i.e. it works for highest weight vectors each up to 2^16-1. // The 64-bit implementation can only compute the first 1129 terms. #include #include #include #include #include // Requires this file in the same directory, available at https://github.com/sercantutar/infint/blob/master/InfInt.h #include "InfInt.h" class Pair { public: std::pair coordinates; long double log; Pair(std::pair coordinates, long double log) { this->coordinates = coordinates; this->log = log; } }; bool operator<(const Pair & p1, const Pair & p2) { return p1.log > p2.log; } int main() { const unsigned short int UPPER_BOUND_FACTOR = -1; // this assumes x0 and friends are unsigned short ints, nothing longer long double* cachedLogs = (long double*) malloc(sizeof (long double) * UPPER_BOUND_FACTOR); const unsigned short int i1shift16 = -1; // ie (1<<16) - 1 = 65535 // Lie superfactorial InfInt denom = "19403468278119790545603479218421760000000000"; for (long i = 1; i < UPPER_BOUND_FACTOR; i++) { cachedLogs[i] = std::log ( i); } std::pair newPair = {0LL,0LL}; std::priority_queue fringe; std::set<:pair long>> seen; // const long long numToCompute = 10; const long long numToCompute = 20000; long numComputed = 0; int numSeen = 1; fringe.push(Pair(std::pair {0LL,0LL}, 99.6740257330631)); long double lastLog = 0.0; std::pair lastCoord; long long lastCoord1; long long lastCoord2; long long curCoord1; long long curCoord2; unsigned short int x0; unsigned short int x1; unsigned short int x2; unsigned short int x3; unsigned short int x4; unsigned short int x5; unsigned short int x6; std::cout<< "Initialization complete\n"; std::ofstream myfile ("e7_rep.txt"); if (myfile.is_open()) { while (numSeen < numToCompute) { numComputed++; Pair cur = fringe.top(); fringe.pop(); seen.erase(cur.coordinates); if (std::abs(lastLog-cur.log) < 1e-12) { curCoord1 = cur.coordinates.first; curCoord2 = cur.coordinates.second; x0 = (curCoord1 & i1shift16) + 1; x1 = ((curCoord1 >> 16) & i1shift16) + 1; x2 = ((curCoord1 >> 32) & i1shift16) + 1; x3 = ((curCoord1 >> 48) & i1shift16) + 1; x4 = (curCoord2 & i1shift16) + 1; x5 = ((curCoord2 >> 16) & i1shift16) + 1; x6 = ((curCoord2 >> 32) & i1shift16) + 1; InfInt dim1 = "1"; dim1 *= (x0); dim1 *= (x1); dim1 *= (x2); dim1 *= (x3); dim1 *= (x4); dim1 *= (x5); dim1 *= (x6); dim1 *= (x0 + x1); dim1 *= (x1 + x2); dim1 *= (x2 + x3); dim1 *= (x2 + x6); dim1 *= (x3 + x4); dim1 *= (x4 + x5); dim1 *= (x0 + x1 + x2); dim1 *= (x1 + x2 + x3); dim1 *= (x1 + x2 + x6); dim1 *= (x2 + x3 + x4); dim1 *= (x2 + x3 + x6); dim1 *= (x3 + x4 + x5); dim1 *= (x0 + x1 + x2 + x3); dim1 *= (x0 + x1 + x2 + x6); dim1 *= (x1 + x2 + x3 + x4); dim1 *= (x1 + x2 + x3 + x6); dim1 *= (x1 + 2*x2 + x3 + x6); dim1 *= (x2 + x3 + x4 + x5); dim1 *= (x2 + x3 + x4 + x6); dim1 *= (x0 + x1 + x2 + x3 + x4); dim1 *= (x0 + x1 + x2 + x3 + x6); dim1 *= (x0 + x1 + 2*x2 + x3 + x6); dim1 *= (x0 + 2*x1 + 2*x2 + x3 + x6); dim1 *= (x1 + x2 + x3 + x4 + x5); dim1 *= (x1 + x2 + x3 + x4 + x6); dim1 *= (x1 + 2*x2 + x3 + x4 + x6); dim1 *= (x1 + 2*x2 + 2*x3 + x4 + x6); dim1 *= (x2 + x3 + x4 + x5 + x6); dim1 *= (x0 + x1 + x2 + x3 + x4 + x5); dim1 *= (x0 + x1 + x2 + x3 + x4 + x6); dim1 *= (x0 + x1 + 2*x2 + x3 + x4 + x6); dim1 *= (x0 + 2*x1 + 2*x2 + x3 + x4 + x6); dim1 *= (x0 + x1 + 2*x2 + 2*x3 + x4 + x6); dim1 *= (x0 + 2*x1 + 2*x2 + 2*x3 + x4 + x6); dim1 *= (x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x6); dim1 *= (x0 + 2*x1 + 3*x2 + 2*x3 + x4 + 2*x6); dim1 *= (x1 + x2 + x3 + x4 + x5 + x6); dim1 *= (x1 + 2*x2 + x3 + x4 + x5 + x6); dim1 *= (x1 + 2*x2 + 2*x3 + x4 + x5 + x6); dim1 *= (x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6); dim1 *= (x0 + x1 + x2 + x3 + x4 + x5 + x6); dim1 *= (x0 + x1 + 2*x2 + x3 + x4 + x5 + x6); dim1 *= (x0 + 2*x1 + 2*x2 + x3 + x4 + x5 + x6); dim1 *= (x0 + x1 + 2*x2 + 2*x3 + x4 + x5 + x6); dim1 *= (x0 + 2*x1 + 2*x2 + 2*x3 + x4 + x5 + x6); dim1 *= (x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x5 + x6); dim1 *= (x0 + x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6); dim1 *= (x0 + 2*x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6); dim1 *= (x0 + 2*x1 + 3*x2 + 2*x3 + 2*x4 + x5 + x6); dim1 *= (x0 + 2*x1 + 3*x2 + 3*x3 + 2*x4 + x5 + x6); dim1 *= (x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x5 + 2*x6); dim1 *= (x0 + 2*x1 + 3*x2 + 2*x3 + 2*x4 + x5 + 2*x6); dim1 *= (x0 + 2*x1 + 3*x2 + 3*x3 + 2*x4 + x5 + 2*x6); dim1 *= (x0 + 2*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6); dim1 *= (x0 + 3*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6); dim1 *= (2*x0 + 3*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6); dim1 /= denom; lastCoord1 = lastCoord.first; lastCoord2 = lastCoord.second; x0 = (lastCoord1 & i1shift16) + 1; x1 = ((lastCoord1 >> 16) & i1shift16) + 1; x2 = ((lastCoord1 >> 32) & i1shift16) + 1; x3 = ((lastCoord1 >> 48) & i1shift16) + 1; x4 = (lastCoord2 & i1shift16) + 1; x5 = ((lastCoord2 >> 16) & i1shift16) + 1; x6 = ((lastCoord2 >> 32) & i1shift16) + 1; InfInt dim2 = "1"; dim2 *= (x0); dim2 *= (x1); dim2 *= (x2); dim2 *= (x3); dim2 *= (x4); dim2 *= (x5); dim2 *= (x6); dim2 *= (x0 + x1); dim2 *= (x1 + x2); dim2 *= (x2 + x3); dim2 *= (x2 + x6); dim2 *= (x3 + x4); dim2 *= (x4 + x5); dim2 *= (x0 + x1 + x2); dim2 *= (x1 + x2 + x3); dim2 *= (x1 + x2 + x6); dim2 *= (x2 + x3 + x4); dim2 *= (x2 + x3 + x6); dim2 *= (x3 + x4 + x5); dim2 *= (x0 + x1 + x2 + x3); dim2 *= (x0 + x1 + x2 + x6); dim2 *= (x1 + x2 + x3 + x4); dim2 *= (x1 + x2 + x3 + x6); dim2 *= (x1 + 2*x2 + x3 + x6); dim2 *= (x2 + x3 + x4 + x5); dim2 *= (x2 + x3 + x4 + x6); dim2 *= (x0 + x1 + x2 + x3 + x4); dim2 *= (x0 + x1 + x2 + x3 + x6); dim2 *= (x0 + x1 + 2*x2 + x3 + x6); dim2 *= (x0 + 2*x1 + 2*x2 + x3 + x6); dim2 *= (x1 + x2 + x3 + x4 + x5); dim2 *= (x1 + x2 + x3 + x4 + x6); dim2 *= (x1 + 2*x2 + x3 + x4 + x6); dim2 *= (x1 + 2*x2 + 2*x3 + x4 + x6); dim2 *= (x2 + x3 + x4 + x5 + x6); dim2 *= (x0 + x1 + x2 + x3 + x4 + x5); dim2 *= (x0 + x1 + x2 + x3 + x4 + x6); dim2 *= (x0 + x1 + 2*x2 + x3 + x4 + x6); dim2 *= (x0 + 2*x1 + 2*x2 + x3 + x4 + x6); dim2 *= (x0 + x1 + 2*x2 + 2*x3 + x4 + x6); dim2 *= (x0 + 2*x1 + 2*x2 + 2*x3 + x4 + x6); dim2 *= (x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x6); dim2 *= (x0 + 2*x1 + 3*x2 + 2*x3 + x4 + 2*x6); dim2 *= (x1 + x2 + x3 + x4 + x5 + x6); dim2 *= (x1 + 2*x2 + x3 + x4 + x5 + x6); dim2 *= (x1 + 2*x2 + 2*x3 + x4 + x5 + x6); dim2 *= (x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6); dim2 *= (x0 + x1 + x2 + x3 + x4 + x5 + x6); dim2 *= (x0 + x1 + 2*x2 + x3 + x4 + x5 + x6); dim2 *= (x0 + 2*x1 + 2*x2 + x3 + x4 + x5 + x6); dim2 *= (x0 + x1 + 2*x2 + 2*x3 + x4 + x5 + x6); dim2 *= (x0 + 2*x1 + 2*x2 + 2*x3 + x4 + x5 + x6); dim2 *= (x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x5 + x6); dim2 *= (x0 + x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6); dim2 *= (x0 + 2*x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6); dim2 *= (x0 + 2*x1 + 3*x2 + 2*x3 + 2*x4 + x5 + x6); dim2 *= (x0 + 2*x1 + 3*x2 + 3*x3 + 2*x4 + x5 + x6); dim2 *= (x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x5 + 2*x6); dim2 *= (x0 + 2*x1 + 3*x2 + 2*x3 + 2*x4 + x5 + 2*x6); dim2 *= (x0 + 2*x1 + 3*x2 + 3*x3 + 2*x4 + x5 + 2*x6); dim2 *= (x0 + 2*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6); dim2 *= (x0 + 3*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6); dim2 *= (2*x0 + 3*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6); dim2 /= denom; if (dim1 == dim2) { std::cout<< std::to_string(numSeen) + " " +(dim1.toString())+ "\n"; numSeen++; } } lastLog = cur.log; lastCoord = cur.coordinates; for (int i = 0; i < 4; i++) { std::pair newCoord = {lastCoord.first + (1LL << (16 * i)),lastCoord.second}; if (seen.count(newCoord)) { continue; } curCoord1 = newCoord.first; curCoord2 = newCoord.second; x0 = (curCoord1 & i1shift16) + 1; x1 = ((curCoord1 >> 16) & i1shift16) + 1; x2 = ((curCoord1 >> 32) & i1shift16) + 1; x3 = ((curCoord1 >> 48) & i1shift16) + 1; x4 = (curCoord2 & i1shift16) + 1; x5 = ((curCoord2 >> 16) & i1shift16) + 1; x6 = ((curCoord2 >> 32) & i1shift16) + 1; // x7 = ((curCoord2 >> 48) & i1shift16) + 1; long double newIrrep = 0; newIrrep += cachedLogs[x0]; newIrrep += cachedLogs[x1]; newIrrep += cachedLogs[x2]; newIrrep += cachedLogs[x3]; newIrrep += cachedLogs[x4]; newIrrep += cachedLogs[x5]; newIrrep += cachedLogs[x6]; newIrrep += cachedLogs[x0 + x1]; newIrrep += cachedLogs[x1 + x2]; newIrrep += cachedLogs[x2 + x3]; newIrrep += cachedLogs[x2 + x6]; newIrrep += cachedLogs[x3 + x4]; newIrrep += cachedLogs[x4 + x5]; newIrrep += cachedLogs[x0 + x1 + x2]; newIrrep += cachedLogs[x1 + x2 + x3]; newIrrep += cachedLogs[x1 + x2 + x6]; newIrrep += cachedLogs[x2 + x3 + x4]; newIrrep += cachedLogs[x2 + x3 + x6]; newIrrep += cachedLogs[x3 + x4 + x5]; newIrrep += cachedLogs[x0 + x1 + x2 + x3]; newIrrep += cachedLogs[x0 + x1 + x2 + x6]; newIrrep += cachedLogs[x1 + x2 + x3 + x4]; newIrrep += cachedLogs[x1 + x2 + x3 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + x3 + x6]; newIrrep += cachedLogs[x2 + x3 + x4 + x5]; newIrrep += cachedLogs[x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x0 + x1 + x2 + x3 + x4]; newIrrep += cachedLogs[x0 + x1 + x2 + x3 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + x3 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + x3 + x6]; newIrrep += cachedLogs[x1 + x2 + x3 + x4 + x5]; newIrrep += cachedLogs[x1 + x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + 2*x3 + x4 + x6]; newIrrep += cachedLogs[x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + x1 + x2 + x3 + x4 + x5]; newIrrep += cachedLogs[x0 + x1 + x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + 2*x3 + x4 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + 2*x3 + x4 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + x4 + 2*x6]; newIrrep += cachedLogs[x1 + x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + 2*x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6]; newIrrep += cachedLogs[x0 + x1 + x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + 2*x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + 2*x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + 2*x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 3*x3 + 2*x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x5 + 2*x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + 2*x4 + x5 + 2*x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 3*x3 + 2*x4 + x5 + 2*x6]; newIrrep += cachedLogs[x0 + 2*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6]; newIrrep += cachedLogs[x0 + 3*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6]; newIrrep += cachedLogs[2*x0 + 3*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6]; fringe.push(Pair(newCoord, newIrrep)); seen.insert(newCoord); } for (int i = 0; i < 3; i++) { std::pair newCoord = {lastCoord.first,lastCoord.second + (1LL << (16 * i))}; if (seen.count(newCoord)) { continue; } curCoord1 = newCoord.first; curCoord2 = newCoord.second; x0 = (curCoord1 & i1shift16) + 1; x1 = ((curCoord1 >> 16) & i1shift16) + 1; x2 = ((curCoord1 >> 32) & i1shift16) + 1; x3 = ((curCoord1 >> 48) & i1shift16) + 1; x4 = (curCoord2 & i1shift16) + 1; x5 = ((curCoord2 >> 16) & i1shift16) + 1; x6 = ((curCoord2 >> 32) & i1shift16) + 1; // x7 = ((curCoord2 >> 48) & i1shift16) + 1; long double newIrrep = 0; newIrrep += cachedLogs[x0]; newIrrep += cachedLogs[x1]; newIrrep += cachedLogs[x2]; newIrrep += cachedLogs[x3]; newIrrep += cachedLogs[x4]; newIrrep += cachedLogs[x5]; newIrrep += cachedLogs[x6]; newIrrep += cachedLogs[x0 + x1]; newIrrep += cachedLogs[x1 + x2]; newIrrep += cachedLogs[x2 + x3]; newIrrep += cachedLogs[x2 + x6]; newIrrep += cachedLogs[x3 + x4]; newIrrep += cachedLogs[x4 + x5]; newIrrep += cachedLogs[x0 + x1 + x2]; newIrrep += cachedLogs[x1 + x2 + x3]; newIrrep += cachedLogs[x1 + x2 + x6]; newIrrep += cachedLogs[x2 + x3 + x4]; newIrrep += cachedLogs[x2 + x3 + x6]; newIrrep += cachedLogs[x3 + x4 + x5]; newIrrep += cachedLogs[x0 + x1 + x2 + x3]; newIrrep += cachedLogs[x0 + x1 + x2 + x6]; newIrrep += cachedLogs[x1 + x2 + x3 + x4]; newIrrep += cachedLogs[x1 + x2 + x3 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + x3 + x6]; newIrrep += cachedLogs[x2 + x3 + x4 + x5]; newIrrep += cachedLogs[x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x0 + x1 + x2 + x3 + x4]; newIrrep += cachedLogs[x0 + x1 + x2 + x3 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + x3 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + x3 + x6]; newIrrep += cachedLogs[x1 + x2 + x3 + x4 + x5]; newIrrep += cachedLogs[x1 + x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + 2*x3 + x4 + x6]; newIrrep += cachedLogs[x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + x1 + x2 + x3 + x4 + x5]; newIrrep += cachedLogs[x0 + x1 + x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + x3 + x4 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + 2*x3 + x4 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + 2*x3 + x4 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + x4 + 2*x6]; newIrrep += cachedLogs[x1 + x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + 2*x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6]; newIrrep += cachedLogs[x0 + x1 + x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + 2*x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + 2*x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x5 + x6]; newIrrep += cachedLogs[x0 + x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 2*x2 + 2*x3 + 2*x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + 2*x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 3*x3 + 2*x4 + x5 + x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + x4 + x5 + 2*x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 2*x3 + 2*x4 + x5 + 2*x6]; newIrrep += cachedLogs[x0 + 2*x1 + 3*x2 + 3*x3 + 2*x4 + x5 + 2*x6]; newIrrep += cachedLogs[x0 + 2*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6]; newIrrep += cachedLogs[x0 + 3*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6]; newIrrep += cachedLogs[2*x0 + 3*x1 + 4*x2 + 3*x3 + 2*x4 + x5 + 2*x6]; fringe.push(Pair(newCoord, newIrrep)); seen.insert(newCoord); } } myfile.close(); } return 0; }