#include <bits/stdc++.h>
#define int __int128
using namespace std;
struct ios {
inline char read() {
static const int inlen = 1 << 18 | 1;
static char buf[inlen], *s, *t;
return (s == t) && (t = (s = buf) + fread(buf, 1, inlen, stdin)), s == t ? -1 : *s++;
}
template<typename T> inline ios& operator>> (T &x) {
static char c11, boo;
for (c11 = read(), boo = 0; !isdigit(c11); c11 = read()) {
if (c11 == -1) return *this;
boo |= c11 == '-';
}
for (x = 0; isdigit(c11); c11 = read()) x = x * 10 + (c11 ^ '0');
boo && (x = -x);
return *this;
}
} fin;
struct exios {
template<typename _CharT, typename _Traits = char_traits<_CharT>>
struct typ {
typedef basic_ostream<_CharT, _Traits>& (* end) (basic_ostream<_CharT, _Traits>&);
};
template<typename T> friend exios &operator<<(exios &out, T num) {
if (num < 0) putchar('-'), num = -num;
if (num >= 10) out << num / 10;
putchar(num % 10 + '0');
return out;
}
friend exios &operator<<(exios &out, const char * s) { printf("%s", s); return out; }
friend exios &operator<<(exios &out, string s) { cout << s; return out; }
friend exios &operator<<(exios &out, typ<char>::end e) { puts(""); return out; }
} fout;
const int maxn = 1e6 + 10;
int n, m;
int a[maxn];
int c[maxn];
int b[maxn];
int g;
signed main() {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
fin >> a[i];
c[i] = a[i];
}
int _n = unique(c + 1, c + 1 + n) - (c + 1);
if (_n == 1) {
if (a[1] >= m - a[1]) {
fout << a[1] << endl;
for (int i = 1; i <= n; i++) fout << a[1] << " ";
} else {
fout << (m - a[1]) % m << endl;
for (int i = 1; i <= n; i++) fout << a[1] - m << " ";
}
return 0;
}
for (int i = 1; i <= n; i++) {
b[i] = m * m - (a[i] + 1) * m + a[i];
assert(b[i] >= 0);
g = __gcd(b[i] >= 0 ? b[i] : -b[i], g);
}
fout << g % m << endl;
for (int i = 1; i <= n; i++) {
fout << b[i] << " ";
}
return 0;
}
两个 Sub 都各错了一个点。。。