#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion var n = I(); var b = I(); var q = I(); var qz = new List<(int, int, int, int, int)>(); var maxiz = new int[n]; maxiz.AsSpan().Fill(-1); var maxD = 0; for (var i = 0; i < q; i++) { var l = I() - 1; var m = I() - 1; var r = I(); var c = I() % b; var d = I(); maxD = Math.Max(d, maxD); maxiz[m] = i; qz.Add((l, m, r, (int)c, d)); } long Power(int x, int p) { var res = 1L; long k = x; while (p > 0) { if ((p & 1) != 0) res = res * k % b; k = k * k % b; p >>= 1; } return res; } // var kdz = new long[n + 1, maxD + 1]; // kdz[0, 0] = 1; // for (var i = 1; i <= n; i++) // { // kdz[i, 0] = 1; // for (var j = 1; j <= maxD; j++) kdz[i, j] = kdz[i, j - 1] * i % b; // } var vz = new long[n]; var ans = new List(); for (var i = 0; i < q; i++) { var (l, m, r, c, d) = qz[i]; for (var z = l; z < r; z++) { if (maxiz[z] < i) continue; vz[z] = (vz[z] + Power(c + z + 1, d)) % b; } ans.Add(vz[m]); } Console.WriteLine(string.Join(Environment.NewLine, ans));