#include #include #include using namespace std; typedef long long LL; int n, k, a, player; LL c, r, res; int tab[5005]; int czy[5005]; int przejscie[5005]; int co[5005][5005]; int mod[5005][5005]; int modulo[5]; LL helpik; LL modzik; LL GCDW (LL a, LL b, LL &l, LL &k) { if (!a) { l = 0; k = 1; return b; } LL d = GCDW(b % a, a, k, l); l -= (b / a) * k; return d; } bool congr (LL a, LL b, LL p, LL q, LL &c, LL &r) { LL x, y; r = GCDW(p, q, x, y); if ((a - b) % r) return 0; x = a + p * (b - a) / r * x; r = p * q / r; c = x % r; if (c < 0) c += r; return 1; } int main () { while (1) { scanf("%d",&n); if (n == 0) break; for (int i = 1; i <= 2 * n; ++i) { przejscie[i] = ((i - 1) >> 1) * 5 + 2 - (i & 1); przejscie[2 * n + i] = ((i - 1) >> 1) * 5 + 4 - (i & 1); } for (int i = 1; i <= n; ++i) przejscie[4 * n + i] = 5 * i; for (int i = 1; i <= 5 * n; ++i) czy[i] = 0; for (int i = 1; i <= 5 * n; ++i) for (int j = 1; j <= 5 * n; ++j) co[i][j] = -1; for (int i = 1; i <= 5 * n; ++i) if (!czy[i]) { vector w; w.push_back(i); czy[k = i] = 1; while (przejscie[k] != w[0]) { w.push_back(przejscie[k]); czy[przejscie[k]] = 1; k = przejscie[k]; } for (int j = 0; j < w.size(); ++j) for (int l = 0; l < w.size(); ++l) { mod[w[j]][w[l]] = w.size(); if (j <= l) { co[w[j]][w[l]] = l - j; } else { co[w[j]][w[l]] = l - j + w.size(); } } } vector pozycje; for (int i = 1; i <= 5 * n; ++i) { scanf("%d",&tab[i]); if (tab[i] < 6) pozycje.push_back(i); } res = -1; for (int i = 0; i < n; ++i) { vector wynik; vector moz; vector tak[5]; for (int j = 1; j <= 5; ++j) moz.push_back(5 * i + j); for (int j = 0; j < 5; ++j) { for (int l = 0; l < 5; ++l) { if (co[pozycje[j]][moz[l]] != -1) { tak[j].push_back(co[pozycje[j]][moz[l]]); modulo[j] = mod[pozycje[j]][moz[l]]; } } } modzik = LL(modulo[0]); for (int j = 0; j < tak[0].size(); ++j) wynik.push_back(tak[0][j]); for (int j = 1; j < 5; ++j) { vector pomoc; for (int l = 0; l < wynik.size(); ++l) for (int v = 0; v < tak[j].size(); ++v) if (congr(wynik[l], LL(tak[j][v]), modzik, LL(modulo[j]), c, r)) { helpik = r; pomoc.push_back(c); } wynik = pomoc; modzik = helpik; } for (int j = 0; j < wynik.size(); ++j) { if (wynik[j] == 0) { if (res == -1 || modzik < res) { res = modzik; player = i + 1; } } else { if (res == -1 || wynik[j] < res) { res = wynik[j]; player = i + 1; } } } } if (res == -1) printf("Neverending game.\n"); else printf("Player %d wins game number %lld.\n",player,res); } return 0; }