#include <cmath>
#include <iostream>
#include <sstream>

using namespace std;

bool is_perfect_square(long n) {
  long factor = (long)std::sqrt(n);
  return factor * factor == n;
}

void print(long seq1, long alist[], long blist[], int len) {

  cout << "** " << len << " ** seq1:" << seq1 << " ";

  cout << "A = [" << alist[0];
  for (int m = 1; m < 4; m++) {
    cout << ", " << alist[m];
  }
  cout << "] ";

  cout << "B = [" << blist[0];
  for (int n = 1; n < len; n++) {
    cout << ", " << blist[n];
  }
  cout << "] " << endl;
}

void run(long seq1) {
  long b5_plus_found = 0;
  long count = 10000;
  // a1
  long a1 = seq1 * seq1;
  // b1
  long b1 = 0; // without loss of generality we restrict a's to be perfect squares

  // b2
  long s_b2 = (long)std::sqrt(a1) + 1;
  for (long i_b2 = s_b2; i_b2 < s_b2 + count; i_b2++) {
    long b2 = (i_b2 * i_b2) - a1;

    // a2
    long s_a2 = (long)std::sqrt(b2) + 1;
    for (long i_a2 = s_a2; i_a2 < s_a2 + count; i_a2++) {
      long a2 = (i_a2 * i_a2) - b2;
      if (!is_perfect_square(a2)) continue;
      if (a2 == a1) continue;

      // b3
      long s_b3 = (long)std::sqrt(a2) + 1;
      for (long i_b3 = s_b3; i_b3 < s_b3 + count; i_b3++) {
        long b3 = (i_b3 * i_b3) - a2;
        if (!is_perfect_square(a1 + b3)) continue;
        if (b3 == b2 || b3 == b1) continue;

        // a3
        long s_a3 = (long)std::sqrt(b3) + 1;
        for (long i_a3 = s_a3; i_a3 < s_a3 + count; i_a3++) {
          long a3 = (i_a3 * i_a3) - b3;
          if (!is_perfect_square(a3)) continue;
          if (!is_perfect_square(a3 + b2)) continue;
          if (a3 == a2 || a3 == a1) continue;

          // b4
          long s_b4 = (long)std::sqrt(a3) + 1;
          for (long i_b4 = s_b4; i_b4 < s_b4 + count; i_b4++) {
            long b4 = (i_b4 * i_b4) - a3;
            if (!is_perfect_square(a1 + b4)) continue;
            if (!is_perfect_square(a2 + b4)) continue;
            if (b4 == b3 || b4 == b2 || b4 == b1) continue;

            // a4
            long s_a4 = (long)std::sqrt(b4) + 1;
            for (long i_a4 = s_a4; i_a4 < s_a4 + count; i_a4++) {
              long a4 = (i_a4 * i_a4) - b4;
              if (!is_perfect_square(a4)) continue;
              if (!is_perfect_square(a4 + b2)) continue;
              if (!is_perfect_square(a4 + b3)) continue;
              if (a4 == a3 || a4 == a2 || a4 == a1) continue;

              long alist[] = {a1, a2, a3, a4};
              int len = 4;
              long blist[] = {b1, b2, b3, b4, -1, -1, -1, -1, -1};

              // b5+
              long s_b5_plus = (long)std::sqrt(a4) + 1;
              long limit = s_b5_plus + (count * 10);
              for (long i_b5_plus = s_b5_plus; i_b5_plus < limit; i_b5_plus++) {
                long b5_plus = (i_b5_plus * i_b5_plus) - a4;
                if (!is_perfect_square(a1 + b5_plus)) continue;
                if (!is_perfect_square(a2 + b5_plus)) continue;
                if (!is_perfect_square(a3 + b5_plus)) continue;
                if (b5_plus == b4 || b5_plus == b3 || b5_plus == b2 || b5_plus == b1) continue;

                blist[len] = b5_plus;
                len += 1;
                limit = i_b5_plus + (count * 10);

                b5_plus_found += 1;

                if (len > 5) {
                  print(seq1, alist, blist, len);
                }
              }
            }
          }
        }
      }
    }
  }
}

// usage        : ./program <first_coefficient>
// compile      : clang++ -std=c++17 -msse4.2 -march=native -Ofast -ffast-math -o program program.cpp
// run single   : ./program 120
// run parallel : seq 0 100000  | parallel --linebuffer nice ./program

int main(int argc, const char *argv[]) {

  if (argc < 2) {
    cerr << "specify first coefficient -- exit" << endl;
    return 1;
  }

  stringstream arg1;
  arg1 << argv[1];

  long seq1;
  arg1 >> seq1;

  run(seq1);

  return 0;
}
