#include<bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define FORD(i, a, b) for (int i = (a), _b = (b); i >= _b; i--)
using ll = long long;
template<typename X, typename Y>
bool chmax(X& a, Y b) { return (a < b) ? a = b, 1 : 0; }
template<typename X, typename Y>
bool chmin(X& a, Y b) { return (a > b) ? a = b, 1 : 0; }
const int INF = 1e9 + 67;
const int MAXA = 1e6;
const int MAXN = 1e5 + 5;
int N, A[MAXN];
namespace Subtask1 {
bool check() {
return N == 2;
}
int cnt[MAXA + 5];
void solve() {
int T = A[1];
FOR(p, 2, (int)sqrt(T)) if (T % p == 0) {
int e = 0;
while (T % p == 0) T /= p, e++;
cnt[p] = e;
}
if (T > 1) cnt[T] = 1;
T = A[2];
int D = 0;
FOR(p, 2, MAXA) {
if (T % p == 0) {
int e = 0;
while (T % p == 0) T /= p, e++;
D += abs(e - cnt[p]);
} else D += cnt[p];
}
cout << D << " " << 2 << "\n";
cout << D << " " << 1 << "\n";
}
}
int spf[MAXA];
void precompute() {
FOR(i, 1, MAXA) spf[i] = i;
for (int i = 2; i * i <= MAXA; i++) if (spf[i] == i)
for (int j = i * i; j <= MAXA; j += i) if (spf[j] == j)
spf[j] = i;
}
namespace Subtask2 {
bool check() {
return N <= 1000;
}
int F[MAXA + 5];
int f(int x, int y) { return F[x] + F[y] - 2 * F[__gcd(x, y)]; }
void solve() {
precompute();
FOR(i, 2, MAXA) F[i] = F[i / spf[i]] + 1;
vector<pair<int, int>> ans(N + 5, make_pair(INF, -1));
FOR(i, 1, N) FOR(j, i + 1, N) {
int D = f(A[i], A[j]);
chmin(ans[i], make_pair(D, j));
chmin(ans[j], make_pair(D, i));
}
FOR(i, 1, N) cout << ans[i].first << " " << ans[i].second << "\n";
}
}
namespace Fulltask {
vector<int> primes;
pair<int, int> best[MAXA + 5], _best[MAXA + 5];
inline bool update(int u, int d, int id) {
if (id == -1) return false;
pair<int, int> X = make_pair(d, id);
if (id == best[u].second) return chmin(best[u], X);
if (id == _best[u].second) return chmin(_best[u], X);
if (X < best[u]) {
_best[u] = best[u];
best[u] = X;
return true;
}
return chmin(_best[u], X);
}
inline void merge(int v, int u) {
if (best[u].second != -1) update(v, best[u].first + 1, best[u].second);
if (_best[u].second != -1) update(v, _best[u].first + 1, _best[u].second);
}
void solve() {
precompute();
FOR(i, 2, MAXA) if (spf[i] == i)
primes.push_back(i);
FOR(i, 1, MAXA) best[i] = _best[i] = make_pair(INF, -1);
FOR(i, 1, N) update(A[i], 0, i);
FORD(u, MAXA, 2) if (best[u].second != -1) {
int T = u;
while (T > 1) {
int p = spf[T];
merge(u / p, u);
while (T % p == 0) T /= p;
}
}
FOR(u, 1, MAXA) if (best[u].second != -1) {
for (int p : primes) {
if (1LL * u * p > MAXA) break;
merge(u * p, u);
}
}
FOR(i, 1, N) {
pair<int, int> ans = make_pair(INF, -1);
if (best[A[i]].second != -1 && best[A[i]].second != i) chmin(ans, best[A[i]]);
if (_best[A[i]].second != -1 && _best[A[i]].second != i) chmin(ans, _best[A[i]]);
cout << ans.first << " " << ans.second << "\n";
}
}
}
void solve() {
cin >> N;
FOR(i, 1, N) cin >> A[i];
if (Subtask1::check()) Subtask1::solve();
else if (Subtask2::check()) Subtask2::solve();
else Fulltask::solve();
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
// freopen("ENERGY.INP", "r", stdin);
// freopen("ENERGY.OUT", "w", stdout);
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifdef LOCAL
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvciAoaW50IGkgPSAoYSksIF9iID0gKGIpOyBpIDw9IF9iOyBpKyspCiNkZWZpbmUgRk9SRChpLCBhLCBiKSBmb3IgKGludCBpID0gKGEpLCBfYiA9IChiKTsgaSA+PSBfYjsgaS0tKQoKdXNpbmcgbGwgPSBsb25nIGxvbmc7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgpib29sIGNobWF4KFgmIGEsIFkgYikgeyByZXR1cm4gKGEgPCBiKSA/IGEgPSBiLCAxIDogMDsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgpib29sIGNobWluKFgmIGEsIFkgYikgeyByZXR1cm4gKGEgPiBiKSA/IGEgPSBiLCAxIDogMDsgfQoKCmNvbnN0IGludCBJTkYgPSAxZTkgKyA2NzsKY29uc3QgaW50IE1BWEEgPSAxZTY7CmNvbnN0IGludCBNQVhOID0gMWU1ICsgNTsKCmludCBOLCBBW01BWE5dOwoKbmFtZXNwYWNlIFN1YnRhc2sxIHsKICAgIGJvb2wgY2hlY2soKSB7CiAgICAgICAgcmV0dXJuIE4gPT0gMjsKICAgIH0KICAgIGludCBjbnRbTUFYQSArIDVdOwogICAgdm9pZCBzb2x2ZSgpIHsKICAgICAgICBpbnQgVCA9IEFbMV07CiAgICAgICAgRk9SKHAsIDIsIChpbnQpc3FydChUKSkgaWYgKFQgJSBwID09IDApIHsKICAgICAgICAgICAgaW50IGUgPSAwOwogICAgICAgICAgICB3aGlsZSAoVCAlIHAgPT0gMCkgVCAvPSBwLCBlKys7CiAgICAgICAgICAgIGNudFtwXSA9IGU7CiAgICAgICAgfQogICAgICAgIGlmIChUID4gMSkgY250W1RdID0gMTsKICAgICAgICBUID0gQVsyXTsKICAgICAgICBpbnQgRCA9IDA7CiAgICAgICAgRk9SKHAsIDIsIE1BWEEpIHsKICAgICAgICAgICAgaWYgKFQgJSBwID09IDApIHsKICAgICAgICAgICAgICAgIGludCBlID0gMDsKICAgICAgICAgICAgICAgIHdoaWxlIChUICUgcCA9PSAwKSBUIC89IHAsIGUrKzsKICAgICAgICAgICAgICAgIEQgKz0gYWJzKGUgLSBjbnRbcF0pOwogICAgICAgICAgICB9IGVsc2UgRCArPSBjbnRbcF07CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgRCA8PCAiICIgPDwgMiA8PCAiXG4iOwogICAgICAgIGNvdXQgPDwgRCA8PCAiICIgPDwgMSA8PCAiXG4iOwogICAgfQp9CgppbnQgc3BmW01BWEFdOwoKdm9pZCBwcmVjb21wdXRlKCkgewogICAgRk9SKGksIDEsIE1BWEEpIHNwZltpXSA9IGk7CiAgICBmb3IgKGludCBpID0gMjsgaSAqIGkgPD0gTUFYQTsgaSsrKSBpZiAoc3BmW2ldID09IGkpCiAgICAgICAgZm9yIChpbnQgaiA9IGkgKiBpOyBqIDw9IE1BWEE7IGogKz0gaSkgaWYgKHNwZltqXSA9PSBqKSAKICAgICAgICAgICAgc3BmW2pdID0gaTsKfQoKbmFtZXNwYWNlIFN1YnRhc2syIHsKICAgIGJvb2wgY2hlY2soKSB7CiAgICAgICAgcmV0dXJuIE4gPD0gMTAwMDsKICAgIH0KICAgIGludCBGW01BWEEgKyA1XTsKICAgIGludCBmKGludCB4LCBpbnQgeSkgeyByZXR1cm4gRlt4XSArIEZbeV0gLSAyICogRltfX2djZCh4LCB5KV07IH0KICAgIHZvaWQgc29sdmUoKSB7CiAgICAgICAgcHJlY29tcHV0ZSgpOwogICAgICAgIEZPUihpLCAyLCBNQVhBKSBGW2ldID0gRltpIC8gc3BmW2ldXSArIDE7CiAgICAgICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBhbnMoTiArIDUsIG1ha2VfcGFpcihJTkYsIC0xKSk7CiAgICAgICAgRk9SKGksIDEsIE4pIEZPUihqLCBpICsgMSwgTikgewogICAgICAgICAgICBpbnQgRCA9IGYoQVtpXSwgQVtqXSk7CiAgICAgICAgICAgIGNobWluKGFuc1tpXSwgbWFrZV9wYWlyKEQsIGopKTsKICAgICAgICAgICAgY2htaW4oYW5zW2pdLCBtYWtlX3BhaXIoRCwgaSkpOwogICAgICAgIH0KICAgICAgICBGT1IoaSwgMSwgTikgY291dCA8PCBhbnNbaV0uZmlyc3QgPDwgIiAiIDw8IGFuc1tpXS5zZWNvbmQgPDwgIlxuIjsKICAgIH0KfQoKbmFtZXNwYWNlIEZ1bGx0YXNrIHsKICAgIHZlY3RvcjxpbnQ+IHByaW1lczsKICAgIHBhaXI8aW50LCBpbnQ+IGJlc3RbTUFYQSArIDVdLCBfYmVzdFtNQVhBICsgNV07CiAgICBpbmxpbmUgYm9vbCB1cGRhdGUoaW50IHUsIGludCBkLCBpbnQgaWQpIHsKICAgICAgICBpZiAoaWQgPT0gLTEpIHJldHVybiBmYWxzZTsKICAgICAgICBwYWlyPGludCwgaW50PiBYID0gbWFrZV9wYWlyKGQsIGlkKTsKICAgICAgICBpZiAoaWQgPT0gYmVzdFt1XS5zZWNvbmQpIHJldHVybiBjaG1pbihiZXN0W3VdLCBYKTsKICAgICAgICBpZiAoaWQgPT0gX2Jlc3RbdV0uc2Vjb25kKSByZXR1cm4gY2htaW4oX2Jlc3RbdV0sIFgpOwogICAgICAgIGlmIChYIDwgYmVzdFt1XSkgewogICAgICAgICAgICBfYmVzdFt1XSA9IGJlc3RbdV07CiAgICAgICAgICAgIGJlc3RbdV0gPSBYOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNobWluKF9iZXN0W3VdLCBYKTsKICAgIH0KICAgIGlubGluZSB2b2lkIG1lcmdlKGludCB2LCBpbnQgdSkgewogICAgICAgIGlmIChiZXN0W3VdLnNlY29uZCAhPSAtMSkgdXBkYXRlKHYsIGJlc3RbdV0uZmlyc3QgKyAxLCBiZXN0W3VdLnNlY29uZCk7CiAgICAgICAgaWYgKF9iZXN0W3VdLnNlY29uZCAhPSAtMSkgdXBkYXRlKHYsIF9iZXN0W3VdLmZpcnN0ICsgMSwgX2Jlc3RbdV0uc2Vjb25kKTsKICAgIH0KICAgIHZvaWQgc29sdmUoKSB7CiAgICAgICAgcHJlY29tcHV0ZSgpOwogICAgICAgIEZPUihpLCAyLCBNQVhBKSBpZiAoc3BmW2ldID09IGkpIAogICAgICAgICAgICBwcmltZXMucHVzaF9iYWNrKGkpOwogICAgICAgIEZPUihpLCAxLCBNQVhBKSBiZXN0W2ldID0gX2Jlc3RbaV0gPSBtYWtlX3BhaXIoSU5GLCAtMSk7CiAgICAgICAgRk9SKGksIDEsIE4pIHVwZGF0ZShBW2ldLCAwLCBpKTsKICAgICAgICBGT1JEKHUsIE1BWEEsIDIpIGlmIChiZXN0W3VdLnNlY29uZCAhPSAtMSkgeyAgICAKICAgICAgICAgICAgaW50IFQgPSB1OwogICAgICAgICAgICB3aGlsZSAoVCA+IDEpIHsKICAgICAgICAgICAgICAgIGludCBwID0gc3BmW1RdOwogICAgICAgICAgICAgICAgbWVyZ2UodSAvIHAsIHUpOwogICAgICAgICAgICAgICAgd2hpbGUgKFQgJSBwID09IDApIFQgLz0gcDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBGT1IodSwgMSwgTUFYQSkgaWYgKGJlc3RbdV0uc2Vjb25kICE9IC0xKSB7CiAgICAgICAgICAgIGZvciAoaW50IHAgOiBwcmltZXMpIHsKICAgICAgICAgICAgICAgIGlmICgxTEwgKiB1ICogcCA+IE1BWEEpIGJyZWFrOwogICAgICAgICAgICAgICAgbWVyZ2UodSAqIHAsIHUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIEZPUihpLCAxLCBOKSB7CiAgICAgICAgICAgIHBhaXI8aW50LCBpbnQ+IGFucyA9IG1ha2VfcGFpcihJTkYsIC0xKTsKICAgICAgICAgICAgaWYgKGJlc3RbQVtpXV0uc2Vjb25kICE9IC0xICYmIGJlc3RbQVtpXV0uc2Vjb25kICE9IGkpIGNobWluKGFucywgYmVzdFtBW2ldXSk7CiAgICAgICAgICAgIGlmIChfYmVzdFtBW2ldXS5zZWNvbmQgIT0gLTEgJiYgX2Jlc3RbQVtpXV0uc2Vjb25kICE9IGkpIGNobWluKGFucywgX2Jlc3RbQVtpXV0pOwogICAgICAgICAgICBjb3V0IDw8IGFucy5maXJzdCA8PCAiICIgPDwgYW5zLnNlY29uZCA8PCAiXG4iOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBOOwogICAgRk9SKGksIDEsIE4pIGNpbiA+PiBBW2ldOwogICAgaWYgKFN1YnRhc2sxOjpjaGVjaygpKSBTdWJ0YXNrMTo6c29sdmUoKTsKICAgIGVsc2UgaWYgKFN1YnRhc2syOjpjaGVjaygpKSBTdWJ0YXNrMjo6c29sdmUoKTsKICAgIGVsc2UgRnVsbHRhc2s6OnNvbHZlKCk7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoTlVMTCk7CgogICAgLy8gZnJlb3BlbigiRU5FUkdZLklOUCIsICJyIiwgc3RkaW4pOwogICAgLy8gZnJlb3BlbigiRU5FUkdZLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKCiAgICBpbnQgdGVzdHMgPSAxOyAvLyBjaW4gPj4gdGVzdHM7CiAgICB3aGlsZSAodGVzdHMtLSkgc29sdmUoKTsKCiAgICAjaWZkZWYgTE9DQUwKICAgIGNlcnIgPDwgIlxuVGltZSBlbGFwc2VkOiAiIDw8IDEuMCAqIGNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQyA8PCAiIHMuXG4iOwogICAgI2VuZGlmCiAgICByZXR1cm4gMDsKfQ==