#include #include #include using namespace std; int N; int posun(int a) { if (a < 2*N) return (a/2)*5+(a%2); if (a < 4*N) return ((a-2*N)/2)*5+2+(a%2); return (a-4*N)*5+4; } typedef pair pll; pll merguj(pll _a, pll _b) { long long A = _a.first, B = _b.first; long long a = _a.second, b = _b.second; if (B < A) return merguj(_b, _a); long long nsn = (A / __gcd(A, B)) * B; for (long long v = b; v < nsn; v += B) { if ((v - a) % A == 0) return make_pair(nsn, v); } return make_pair(-1, -1); } int main() { while(true) { scanf("%d", &N); if (N == 0) return 0; if (N == 1) { printf("Player 1 wins game number 1.\n"); continue; } int pos[5]; for (int i = 0; i < 5*N; i++) { int a; scanf("%d", &a); if (a > 5) continue; pos[a-1] = i; } for (int i = 0; i < 5; i++) pos[i] = posun(pos[i]); vector visited(5*N, 0); vector len(5*N, -1); vector prvy[5]; for (int i = 0; i < 5; i++) prvy[i].resize(5*N, -1); for (int i = 0; i < 5*N; i++) if (!visited[i]) { int dlzka = 1; for (int j = posun(i); j != i; j = posun(j)) dlzka++; len[i] = dlzka; visited[i] = 1; for (int j = posun(i); j != i; j = posun(j)) { len[j] = dlzka; visited[j] = 1; } } for (int k = 0; k < 5; k++) { int time = 0; prvy[k][pos[k]] = 0; for (int j = posun(pos[k]); j != pos[k]; j = posun(j)) prvy[k][j] = ++time; } long long bestT = -1; int besth = -1; for (int h = 0; h < N; h++) { int pe[] = { 0, 1, 2, 3, 4 }; do { int niecozle = 0; long long velke[5], male[5]; for (int i = 0; i < 5; i++) { velke[i] = len[5*h+i]; male[i] = prvy[pe[i]][5*h+i]; if (male[i] == -1) niecozle = 1; } if (niecozle) continue; pll cond = make_pair(velke[0], male[0]); for (int i = 1; i < 5; i++) { cond = merguj(cond, make_pair(velke[i], male[i])); if (cond.first == -1 || cond.second == -1) break; } if (cond.first == -1 || cond.second == -1) continue; long long T = cond.second; if (T < bestT || bestT == -1) bestT = T, besth = h; } while (next_permutation(pe, pe+5)); } if (bestT == -1) printf("Neverending game.\n"); else printf("Player %d wins game number %lld.\n", besth+1, bestT+1); } }