func_code_string: #include <bits/stdc++.h>   const int mod = 998244353;   using namespace std;   inline int read() {     int f = 1, x = 0;     char s = getchar();     while (!isdigit(s)) {       if (s ==  - ) f = -1;       s = getchar();     }     while (isdigit(s)) {       x = (x << 1) + (x << 3) + (s ^ 48), s = getchar();     }     return x * f;   }   int n, a[500100], is[500100], prime[500100], tot, ans1[500100], ans2[500100];   inline void init(void) {     for (int i = 2; i <= 4000; i++) {       if (!is[i]) prime[++tot] = i;       for (int j = 1; j <= tot && i * prime[j] <= 4000; j++) {         is[i * prime[j]] = 1;         if (i % prime[j] == 0) break;       }     }   }   inline int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }   signed main(void) {     n = read();     init();     for (int i = 1; i <= n; i++) {       ans1[i] = ans2[i] = -1;       a[i] = read();       int t = a[i];       for (int j = 1; j <= tot; j++) {         int mul = 1;         while (t % prime[j] == 0) t /= prime[j], mul *= prime[j];         if (mul != 1 && a[i] / mul != 1) ans1[i] = mul, ans2[i] = a[i] / mul;       }       if (t != 1 && a[i] / t != 1) ans1[i] = t, ans2[i] = a[i] / t;     }     for (int i = 1; i <= n; i++) printf( %d  , ans1[i]);     puts(  );     for (int i = 1; i <= n; i++) printf( %d  , ans2[i]);     return 0;   }   