//先贴上暴力代码,再加上 拓展欧几里得算法
//*********************************************************************************
#include <iostream>
using namespace std;
const int mod = 10001;
int t, x[210];
void solve() {
for (int a = 0; a <= 10000; a++) {
for (int b = 0; b <= 10000; b++) {
bool flag = true;
for (int i = 2; i <= 2 * t; i += 2) {
x[i] = (a*x[i - 1] + b) % mod;
if (i + 1 <= 2 * t&&x[i + 1] != ((a*x[i] + b) % mod)) {
flag = false;
break;
}
}
if (flag) return;
}
}
}
int main() {
cin >> t;
for (int i = 1; i <= 2 * t; i += 2) cin >> x[i];
solve();
for (int i = 2; i <= 2 * t; i += 2) cout << x[i] << "\n";
return 0;
}
//***************************************************************************************
#include <iostream>
using namespace std;
const int mod = 10001;
typedef long long ll;
ll x[210];
int t;
void exgcd(ll a, ll b, ll &d, ll&x, ll &y) {
if (!b) { d = a; x = 1; y = 0; }
else { exgcd(b, a%b, d, y, x); y -= x*(a / b); }
}
void solve() {
for (int a = 0; a<mod; a++) {
ll n, b, g;
ll temp = x[3] - a*a*x[1];
exgcd(mod, a + 1, g, n, b);//得到了g n b
if (temp%g) continue;//没有解
b = temp / g * b;
bool flag = true;
for (int i = 2; i <= 2 * t; i += 2) {
x[i] = ((ll)x[i - 1] * a + b) % mod;
if ((i + 1)<(2 * t) && x[i + 1] != ((x[i] * a + b) % mod)) {
flag = false;
break;
}
}
if (flag) return;
}
}
int main() {
cin >> t;
for (int i = 1; i <= 2 * t; i += 2) cin >> x[i];
solve();
for (int i = 2; i <= 2 * t; i += 2) cout << x[i] << endl;
return 0;
}
//调试时,生成的.exe不是重新编译的源代码的,白调试好久
\