#include<bits/stdc++.h>

#define int long long
#define db(a, ...) cerr<<#a<<" = "<<a<<'\n'
#define db2(a, b) cerr<<#a<<" = "<<a<<", ", db(b)
#define db3(a, b, c) cerr<<#a<<" = "<<a<<", ", db2(b, c)
#define db4(a, b, c, d) cerr<<#a<<" = "<<a<<", ", db3(b, c, d)

using namespace std;

const int MOD = 200003;

using cd = complex<double>;
const double PI = acos(-1);

void fft(vector<cd> &a, bool invert) {
    int n = a.size();

    for (int i = 1, j = 0; i < n; i++) {
        int bit = n >> 1;
        for (; j & bit; bit >>= 1)
            j ^= bit;
        j ^= bit;

        if (i < j)
            swap(a[i], a[j]);
    }

    for (int len = 2; len <= n; len <<= 1) {
        double ang = 2 * PI / len * (invert ? -1 : 1);
        cd wlen(cos(ang), sin(ang));
        for (int i = 0; i < n; i += len) {
            cd w(1);
            for (int j = 0; j < len / 2; j++) {
                cd u = a[i + j], v = a[i + j + len / 2] * w;
                a[i + j] = u + v;
                a[i + j + len / 2] = u - v;
                w *= wlen;
            }
        }
    }

    if (invert) {
        for (cd &x : a)
            x /= n;
    }
}


vector<int> multiply(vector<int> const &a, vector<int> const &b) {
    vector<cd> fa(a.begin(), a.end()), fb(b.begin(), b.end());
    int n = 1;
    while (n < a.size() + b.size())
        n <<= 1;
    fa.resize(n);
    fb.resize(n);

    fft(fa, false);
    fft(fb, false);
    for (int i = 0; i < n; i++)
        fa[i] *= fb[i];
    fft(fa, true);

    vector<int> result(n);
    for (int i = 0; i < n; i++)
        result[i] = round(fa[i].real());
    return result;
}

int n, M[MOD];

int mul(int x, int k) {
    if (k == 0)
        return 1;
    int tmp = mul(x, k / 2);
    if (k % 2 == 0)
        return tmp * tmp % MOD;
    return tmp * tmp % MOD * x % MOD;
}

int32_t main() {
#ifdef ACM
    freopen("A.in", "r", stdin);
#endif
    for (int i = 0; i < MOD - 1; i++)
        M[mul(2, i)] = i;
    cin >> n;
    int x, rs = 0;
    vector<int> V(MOD);
    while (n--) {
        cin >> x;
        if (x == 0)
            continue;
        rs -= x * x % MOD;
        V[M[x]]++;
    }
    vector<int> A = multiply(V, V);
    for (int i = 0; i < A.size(); i++)
        rs += mul(2, i) * A[i];
    cout << rs / 2;
}
### Prompt

Generate a CPP solution to the following problem:

Let’s take a prime P = 200\,003. You are given N integers A_1, A_2, \ldots, A_N. Find the sum of ((A_i \cdot A_j) \bmod P) over all N \cdot (N-1) / 2 unordered pairs of elements (i < j).

Please note that the sum isn't computed modulo P.

Constraints

* 2 \leq N \leq 200\,000
* 0 \leq A_i < P = 200\,003
* All values in input are integers.

Input

Input is given from Standard Input in the following format.


N
A_1 A_2 \cdots A_N


Output

Print one integer — the sum over ((A_i \cdot A_j) \bmod P).

Examples

Input

4
2019 0 2020 200002


Output

474287


Input

5
1 1 2 2 100000


Output

600013

### Response

```cpp
#include<bits/stdc++.h>

#define int long long
#define db(a, ...) cerr<<#a<<" = "<<a<<'\n'
#define db2(a, b) cerr<<#a<<" = "<<a<<", ", db(b)
#define db3(a, b, c) cerr<<#a<<" = "<<a<<", ", db2(b, c)
#define db4(a, b, c, d) cerr<<#a<<" = "<<a<<", ", db3(b, c, d)

using namespace std;

const int MOD = 200003;

using cd = complex<double>;
const double PI = acos(-1);

void fft(vector<cd> &a, bool invert) {
    int n = a.size();

    for (int i = 1, j = 0; i < n; i++) {
        int bit = n >> 1;
        for (; j & bit; bit >>= 1)
            j ^= bit;
        j ^= bit;

        if (i < j)
            swap(a[i], a[j]);
    }

    for (int len = 2; len <= n; len <<= 1) {
        double ang = 2 * PI / len * (invert ? -1 : 1);
        cd wlen(cos(ang), sin(ang));
        for (int i = 0; i < n; i += len) {
            cd w(1);
            for (int j = 0; j < len / 2; j++) {
                cd u = a[i + j], v = a[i + j + len / 2] * w;
                a[i + j] = u + v;
                a[i + j + len / 2] = u - v;
                w *= wlen;
            }
        }
    }

    if (invert) {
        for (cd &x : a)
            x /= n;
    }
}


vector<int> multiply(vector<int> const &a, vector<int> const &b) {
    vector<cd> fa(a.begin(), a.end()), fb(b.begin(), b.end());
    int n = 1;
    while (n < a.size() + b.size())
        n <<= 1;
    fa.resize(n);
    fb.resize(n);

    fft(fa, false);
    fft(fb, false);
    for (int i = 0; i < n; i++)
        fa[i] *= fb[i];
    fft(fa, true);

    vector<int> result(n);
    for (int i = 0; i < n; i++)
        result[i] = round(fa[i].real());
    return result;
}

int n, M[MOD];

int mul(int x, int k) {
    if (k == 0)
        return 1;
    int tmp = mul(x, k / 2);
    if (k % 2 == 0)
        return tmp * tmp % MOD;
    return tmp * tmp % MOD * x % MOD;
}

int32_t main() {
#ifdef ACM
    freopen("A.in", "r", stdin);
#endif
    for (int i = 0; i < MOD - 1; i++)
        M[mul(2, i)] = i;
    cin >> n;
    int x, rs = 0;
    vector<int> V(MOD);
    while (n--) {
        cin >> x;
        if (x == 0)
            continue;
        rs -= x * x % MOD;
        V[M[x]]++;
    }
    vector<int> A = multiply(V, V);
    for (int i = 0; i < A.size(); i++)
        rs += mul(2, i) * A[i];
    cout << rs / 2;
}
```