#nullable enable using System.Runtime.CompilerServices; #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' ', StringSplitOptions.RemoveEmptyEntries), 0); return T.Parse(_input[_iter++], null); } #endregion var n = I(); var a = I(); var b = I(); var c = I(); var g = new Grid2(n, n); bool J() { ReadOnlySpan<(int, int)> moves = [(-1, 0), (0, -1), (0, 1), (1, 0)]; for (var i = 0; i < n; i++) for (var j = 0; j < n; j++) { if (g[i, j] != 2) continue; var f = 0; foreach (var (di, dj) in moves) { var (ni, nj) = (i + di, j + dj); if (g.Inside(ni, nj)) { var v = g[ni, nj]; if (v == 1) f |= 1; if (v == 3) f |= 2; } if (f == 3) return false; } } return true; } void C(List<(int, int)> nz) { var x = 3; var k = 0; var m = -1; for (var i = 0; i < n; i++) for (var j = 0; j < n; j++) { while (k <= 0) { x--; (k, m) = nz[x]; } k--; g[i, j] = m; } } { C([(a, 1), (c, 3), (b, 2)]); if (!J()) C([(c, 3), (a, 1), (b, 2)]); } Console.WriteLine(g.Joined()); partial class Grid2(int _l0, int _l1) { public int L0 => _l0; public int L1 => _l1; readonly T[] _data = new T[_l0 * _l1]; public ref T this[int i, int j] { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => ref _data[i * _l1 + j]; } public void Fill(T value) => _data.AsSpan().Fill(value); public bool Inside(int i, int j) => (uint)i < (uint)_l0 && (uint)j < (uint)_l1; } partial class Grid2 { public ReadOnlySpan Row(int i) => _data.AsSpan(i * _l0, _l1); public string Joined() { var res = new List(); for (var i = 0; i < _l0; i++) res.Add(string.Join("", [.. Row(i)])); return string.Join(Environment.NewLine, res); } }