#include #define f first #define s second #define ll long long using namespace std; const int MAX = 2e6 + 5; int N; ll a, b, c, d, e, f; pair B[MAX]; bool M[40][40]; int I[30]; int J[30]; clock_t start, finish; struct mov { int i, j, t, r; int I[5] = {0, 0, 0, 0, 0}; int J[5] = {0, 0, 0, 0, 0}; }; stack S; vector> VS; bool Check(int i, int j, int t, int r) { if(t == 0) { if(r == 0) return !(M[i][j] || M[i - 1][j] || M[i - 1][j - 1] || M[i][j - 1]); if(r == 1) return !(M[i][j] || M[i - 1][j] || M[i - 1][j + 1] || M[i][j + 1]); if(r == 2) return !(M[i][j] || M[i][j + 1] || M[i + 1][j] || M[i + 1][j + 1]); if(r == 3) return !(M[i][j] || M[i][j - 1] || M[i + 1][j] || M[i + 1][j - 1]); } else if(t == 1) { if(r == 0) return !(M[i][j] || M[i - 1][j] || M[i][j - 1]); if(r == 1) return !(M[i][j] || M[i - 1][j] || M[i][j + 1]); if(r == 2) return !(M[i][j] || M[i + 1][j] || M[i][j + 1]); if(r == 3) return !(M[i][j] || M[i + 1][j] || M[i][j - 1]); } else if(t == 2) { if(r == 0) return !(M[i][j] || M[i][j - 1] || M[i][j - 2] || M[i - 1][j]); if(r == 1) return !(M[i][j] || M[i][j + 1] || M[i - 1][j] || M[i - 2][j]); if(r == 2) return !(M[i][j] || M[i][j + 1] || M[i][j + 2] || M[i + 1][j]); if(r == 3) return !(M[i][j] || M[i][j - 1] || M[i + 1][j] || M[i + 2][j]); } else if(t == 3) { if(r == 0) return !(M[i][j] || M[i][j - 1] || M[i][j - 2] || M[i][j - 3]); if(r == 1) return !(M[i][j] || M[i - 1][j] || M[i - 2][j] || M[i - 3][j]); if(r == 2) return !(M[i][j] || M[i][j + 1] || M[i][j + 2] || M[i][j + 3]); if(r == 3) return !(M[i][j] || M[i + 1][j] || M[i + 2][j] || M[i + 3][j]); } else { if(r == 0) return !(M[i][j] || M[i - 1][j] || M[i - 2][j] || M[i - 1][j - 1]); if(r == 1) return !(M[i][j] || M[i][j + 1] || M[i][j + 2] || M[i - 1][j + 1]); if(r == 2) return !(M[i][j] || M[i + 1][j] || M[i + 2][j] || M[i + 1][j + 1]); if(r == 3) return !(M[i][j] || M[i][j - 1] || M[i][j - 2] || M[i + 1][j - 1]); } } void Set(int i, int j, int t, int r) { if(t == 0) { if(r == 0) { M[i][j] = M[i - 1][j] = M[i - 1][j - 1] = M[i][j - 1] = 1; I[i] += 2; I[i - 1] += 2; J[j] += 2; J[j - 1] += 2; } if(r == 1) { M[i][j] = M[i - 1][j] = M[i - 1][j + 1] = M[i][j + 1] = 1; I[i] += 2; I[i - 1] += 2; J[j] += 2; J[j + 1] += 2; } if(r == 2) { M[i][j] = M[i][j + 1] = M[i + 1][j] = M[i + 1][j + 1] = 1; I[i] += 2; I[i + 1] += 2; J[j] += 2; J[j + 1] += 2; } if(r == 3) { M[i][j] = M[i][j - 1] = M[i + 1][j] = M[i + 1][j - 1] = 1; I[i] += 2; I[i + 1] += 2; J[j] += 2; J[j - 1] += 2; } } else if(t == 1) { if(r == 0) { M[i][j] = M[i - 1][j] = M[i][j - 1] = 1; I[i] += 2; I[i - 1] += 1; J[j] += 2; J[j - 1] += 1; } if(r == 1) { M[i][j] = M[i - 1][j] = M[i][j + 1] = 1; I[i] += 2; I[i - 1] += 1; J[j] += 2; J[j + 1] += 1; } if(r == 2) { M[i][j] = M[i + 1][j] = M[i][j + 1] = 1; I[i] += 2; I[i + 1] += 1; J[j] += 2; J[j + 1] += 1; } if(r == 3) { M[i][j] = M[i + 1][j] = M[i][j - 1] = 1; I[i] += 2; I[i + 1] += 1; J[j] += 2; J[j - 1] += 1; } } else if(t == 2) { if(r == 0) { M[i][j] = M[i][j - 1] = M[i][j - 2] = M[i - 1][j] = 1; I[i] += 3; I[i - 1] += 1; J[j] += 2; J[j - 1] += 1; J[j - 2] += 1; } if(r == 1) { M[i][j] = M[i][j + 1] = M[i - 1][j] = M[i - 2][j] = 1; I[i] += 2; I[i - 1] += 1; I[i - 2] += 1; J[j] += 3; J[j + 1] = 1; } if(r == 2) { M[i][j] = M[i][j + 1] = M[i][j + 2] = M[i + 1][j] = 1; I[i] += 3; I[i + 1] += 1; J[j] += 2; J[j + 1] += 1; J[j + 2] += 1; } if(r == 3) { M[i][j] = M[i][j - 1] = M[i + 1][j] = M[i + 2][j] = 1; I[i] += 2; I[i + 1] += 1; I[i + 2] += 1; J[j] += 3; J[j - 1] = 1; } } else if(t == 3) { if(r == 0) { M[i][j] = M[i][j - 1] = M[i][j - 2] = M[i][j - 3] = 1; I[i] += 4; J[j] += 1; J[j - 1] += 1; J[j - 2] += 1; J[j - 3] += 1; } if(r == 1) { M[i][j] = M[i - 1][j] = M[i - 2][j] = M[i - 3][j] = 1; I[i] += 1; I[i - 1] += 1; I[i - 2] += 1; I[i - 3] += 1; J[j] += 4; } if(r == 2) { M[i][j] = M[i][j + 1] = M[i][j + 2] = M[i][j + 3] = 1; I[i] += 4; J[j] += 1; J[j + 1] += 1; J[j + 2] += 1; J[j + 3] += 1; } if(r == 3) { M[i][j] = M[i + 1][j] = M[i + 2][j] = M[i + 3][j] = 1; I[i] += 1; I[i + 1] += 1; I[i + 2] += 1; I[i + 3] += 1; J[j] += 4; } } else { if(r == 0) { M[i][j] = M[i - 1][j] = M[i - 2][j] = M[i - 1][j - 1] = 1; I[i] += 1; I[i - 1] += 2; I[i - 2] += 1; J[j] += 3; J[j - 1] += 1; } if(r == 1) { M[i][j] = M[i][j + 1] = M[i][j + 2] = M[i - 1][j + 1] = 1; I[i] += 3; I[i - 1] += 1; J[j] += 1; J[j + 1] += 2; J[j + 2] += 1; } if(r == 2) { M[i][j] = M[i + 1][j] = M[i + 2][j] = M[i + 1][j + 1] = 1; I[i] += 1; I[i + 1] += 2; I[i + 2] += 1; J[j] += 3; J[j + 1] += 1; } if(r == 3) { M[i][j] = M[i][j - 1] = M[i][j - 2] = M[i + 1][j - 1] = 1; I[i] += 3; I[i + 1] += 1; J[j] += 1; J[j - 1] += 2; J[j - 2] += 1; } } } void Remove(int i, int j, int t, int r) { if(t == 0) { if(r == 0) { M[i][j] = M[i - 1][j] = M[i - 1][j - 1] = M[i][j - 1] = 0; I[i] -= 2; I[i - 1] -= 2; J[j] -= 2; J[j - 1] -= 2; } if(r == 1) { M[i][j] = M[i - 1][j] = M[i - 1][j + 1] = M[i][j + 1] = 0; I[i] -= 2; I[i - 1] -= 2; J[j] -= 2; J[j + 1] -= 2; } if(r == 2) { M[i][j] = M[i][j + 1] = M[i + 1][j] = M[i + 1][j + 1] = 0; I[i] -= 2; I[i + 1] -= 2; J[j] -= 2; J[j + 1] -= 2; } if(r == 3) { M[i][j] = M[i][j - 1] = M[i + 1][j] = M[i + 1][j - 1] = 0; I[i] -= 2; I[i + 1] -= 2; J[j] -= 2; J[j - 1] -= 2; } } else if(t == 1) { if(r == 0) { M[i][j] = M[i - 1][j] = M[i][j - 1] = 0; I[i] -= 2; I[i - 1] -= 1; J[j] -= 2; J[j - 1] -= 1; } if(r == 1) { M[i][j] = M[i - 1][j] = M[i][j + 1] = 0; I[i] -= 2; I[i - 1] -= 1; J[j] -= 2; J[j + 1] -= 1; } if(r == 2) { M[i][j] = M[i + 1][j] = M[i][j + 1] = 0; I[i] -= 2; I[i + 1] -= 1; J[j] -= 2; J[j + 1] -= 1; } if(r == 3) { M[i][j] = M[i + 1][j] = M[i][j - 1] = 0; I[i] -= 2; I[i + 1] -= 1; J[j] -= 2; J[j - 1] -= 1; } } else if(t == 2) { if(r == 0) { M[i][j] = M[i][j - 1] = M[i][j - 2] = M[i - 1][j] = 0; I[i] -= 3; I[i - 1] -= 1; J[j] -= 2; J[j - 1] -= 1; J[j - 2] -= 1; } if(r == 1) { M[i][j] = M[i][j + 1] = M[i - 1][j] = M[i - 2][j] = 0; I[i] -= 2; I[i - 1] -= 1; I[i - 2] -= 1; J[j] -= 3; J[j + 1] -= 1; } if(r == 2) { M[i][j] = M[i][j + 1] = M[i][j + 2] = M[i + 1][j] = 0; I[i] -= 3; I[i + 1] -= 1; J[j] -= 2; J[j + 1] -= 1; J[j + 2] -= 1; } if(r == 3) { M[i][j] = M[i][j - 1] = M[i + 1][j] = M[i + 2][j] = 0; I[i] -= 2; I[i + 1] -= 1; I[i + 2] -= 1; J[j] -= 3; J[j - 1] -= 1; } } else if(t == 3) { if(r == 0) { M[i][j] = M[i][j - 1] = M[i][j - 2] = M[i][j - 3] = 0; I[i] -= 4; J[j] -= 1; J[j - 1] -= 1; J[j - 2] -= 1; J[j - 3] -= 1; } if(r == 1) { M[i][j] = M[i - 1][j] = M[i - 2][j] = M[i - 3][j] = 0; I[i] -= 1; I[i - 1] -= 1; I[i - 2] -= 1; I[i - 3] -= 1; J[j] -= 4; } if(r == 2) { M[i][j] = M[i][j + 1] = M[i][j + 2] = M[i][j + 3] = 0; I[i] -= 4; J[j] -= 1; J[j + 1] -= 1; J[j + 2] -= 1; J[j + 3] -= 1; } if(r == 3) { M[i][j] = M[i + 1][j] = M[i + 2][j] = M[i + 3][j] = 0; I[i] -= 1; I[i + 1] -= 1; I[i + 2] -= 1; I[i + 3] -= 1; J[j] -= 4; } } else { if(r == 0) { M[i][j] = M[i - 1][j] = M[i - 2][j] = M[i - 1][j - 1] = 0; I[i] -= 1; I[i - 1] -= 2; I[i - 2] -= 1; J[j] -= 3; J[j - 1] -= 1; } if(r == 1) { M[i][j] = M[i][j + 1] = M[i][j + 2] = M[i - 1][j + 1] = 0; I[i] -= 3; I[i - 1] -= 1; J[j] -= 1; J[j + 1] -= 2; J[j + 2] -= 1; } if(r == 2) { M[i][j] = M[i + 1][j] = M[i + 2][j] = M[i + 1][j + 1] = 0; I[i] -= 1; I[i + 1] -= 2; I[i + 2] -= 1; J[j] -= 3; J[j + 1] -= 1; } if(r == 3) { M[i][j] = M[i][j - 1] = M[i][j - 2] = M[i + 1][j - 1] = 0; I[i] -= 3; I[i + 1] -= 1; J[j] -= 1; J[j - 1] -= 2; J[j - 2] -= 1; } } } void IN() { freopen("block.in", "r", stdin); scanf("%d %lld %lld %lld %lld %lld %lld", &N, &a, &b, &c, &d, &e, &f); return; } void OUT() { freopen("block.out", "w", stdout); printf("%d\n", VS.size()); for(pair x : VS) printf("%d %d\n", x.f, x.s); return; } void SOLVE() { for(int i = 0; i <= N + 1; i++) M[i][0] = M[i][N + 1] = M[0][i] = M[N + 1][i] = 1; clock_t limit = 4.5 * CLOCKS_PER_SEC; for(int i = 1; i < MAX; i++) { c = (c ^ a) + b; f = (f ^ d) + e; B[i].f = c % 5; B[i].s = f % 4; } int idx = 1; while(finish - start < limit) { bool track = 1; for(int i = 1; i <= N; i++) { bool flag = 0; for(int j = 1; j <= N; j++) { if(Check(i, j, B[idx].f, B[idx].s)) { cout << idx << " " << B[idx].f << " " << B[idx].s << "\n"; VS.push_back({i, j}); Set(i, j, B[idx].f, B[idx].s); track = 0; for(int k = 1; k <= N; k++) { if(I[k] == N) { for(int l = 1; l <= N; l++) M[k][l] = 0, J[l]--; I[k] = 0; } if(J[k] == N) { for(int l = 1; l <= N; l++) M[l][k] = 0, I[l]--; J[k] = 0; } } idx++; flag = 1; break; } } if(flag) break; } for(int i = 1; i <= N; i++) { for(int j = 1; j <= N; j++) cout << M[i][j] << " "; cout << "\n"; } cout << "\\\\\\\\\\\\\\\\\\\\\\\n"; if(track) break; } return; } int main() { IN(); SOLVE(); OUT(); return 0; }