#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define DEBUG(x) cout << '>' << #x << ':' << x << endl; #define FOR(i, a, b) for (int i = (a); i < (b); ++i) #define FOR2(i, a, b) for (int i = (a); i > (b); --i) inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; } const int INF = 1<<29; typedef long long ll; const int MAX = 1007; int input[5*MAX], invp[5*MAX], perm[5*MAX]; int player[5*MAX], pos[5*MAX]; int cycle_len[5]; vector > factors[5]; int step[MAX][5][5]; struct rec { int pfactor, power, residue; rec(int _pfactor, int _power, int _residue): pfactor(_pfactor), power(_power), residue(_residue) {} bool operator<(const rec & r) const { return pfactor < r.pfactor || (pfactor == r.pfactor && power < r.power); } }; ll gcd(ll a, ll b, ll & x, ll & y) { if (!b) { x = 1; y = 0; return a; } ll xx, yy; ll d = gcd(b, a%b, xx, yy); x = yy; y = xx - (a/b)*yy; return d; } inline ll mod(ll X, ll MOD) { return X % MOD; } ll chinese(ll N, vector & cf, vector & cm) { ll res = 0; FOR(i, 0, cf.size()) { ll inv, temp; gcd(N/cf[i], cf[i], inv, temp); if (inv < 0) inv += N; res = mod(res + mod(mod(N/cf[i]*inv, N) * cm[i], N), N); } return res; } int main() { while (true) { int N, N5; scanf("%d", &N); N5 = 5*N; if (!N) break; FOR(i, 0, N5) scanf("%d", &input[i]); //fill the permutation int ind1 = 0, ind2 = 2*N, ind3 = 4*N; FOR(i, 0, N) { invp[5*i] = ind1++; invp[5*i+1] = ind1++; invp[5*i+2] = ind2++; invp[5*i+3] = ind2++; invp[5*i+4] = ind3++; } FOR(i, 0, N5) perm[invp[i]] = i; //fill the positions of the players FOR(i, 0, N) { player[2*i] = i; player[2*i+1] = i; pos[2*i] = 0; pos[2*i+1] = 1; } FOR(i, N, 2*N) { player[2*i] = i-N; player[2*i+1] = i-N; pos[2*i] = 2; pos[2*i+1] = 3; } FOR(i, 4*N, 5*N) { player[i] = i-4*N; pos[i] = 4; } //FOR(i, 0, N5) cout << pos[i] << endl; //fill steps FOR(i, 0, N) FOR(j, 0, 5) FOR(k, 0, 5) step[i][j][k] = -1; FOR(i, 0, N5) { if (input[i] > 5) continue; int pos2 = i, counter = 0; do { step[player[pos2]][pos[pos2]][input[i]-1] = counter; ++counter; pos2 = perm[pos2]; } while (pos2 != i); cycle_len[input[i]-1] = counter; } //factorize cycle lens FOR(i, 0, 5) { factors[i].clear(); int temp = cycle_len[i]; for (int j = 2; j*j <= temp; ++j) if (temp % j == 0) { int power = 1; while (temp % j == 0) { power *= j; temp /= j; } factors[i].push_back(make_pair(j, power)); } if (temp > 1) factors[i].push_back(make_pair(temp, temp)); } vector order; FOR(i, 0, 5) order.push_back(i); ll best = -1, bestp; do { FOR(i, 0, N) //for each player { vector eq; bool ok = true; FOR(j, 0, 5) //for hand pos { if (step[i][j][order[j]] == -1) { ok = false; break; } FOR(k, 0, factors[order[j]].size()) eq.push_back(rec(factors[order[j]][k].first, factors[order[j]][k].second, step[i][j][order[j]] % factors[order[j]][k].second)); } if (!ok) continue; sort(eq.begin(), eq.end()); ll X = 1; vector cf, cm; FOR(j, 0, eq.size()) { if (j+1 == eq.size() || eq[j].pfactor != eq[j+1].pfactor) { X *= eq[j].power; cf.push_back(eq[j].power); cm.push_back(eq[j].residue); } else if (eq[j+1].residue % eq[j].power != eq[j].residue) { ok = false; break; } } if (!ok) continue; /*DEBUG(i); DEBUG(X); cout << "cf: "; FOR(i, 0, cf.size()) cout << cf[i] << " "; cout << endl; cout << "cm: "; FOR(i, 0, cm.size()) cout << cm[i] << " "; cout << endl;*/ ll act = chinese(X, cf, cm); if (best == -1 || act < best) { best = act; bestp = i; } } } while (next_permutation(order.begin(), order.end())); if (best == -1) printf("Neverending game.\n"); else printf("Player %lld wins game number %lld.\n", bestp+1, best+1); } return 0; }