using System;
namespace CodeStorm
{
class Triangles
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
string[] A_temp = Console.ReadLine().Split(' ');
int[] A = Array.ConvertAll(A_temp, Int32.Parse);
int[] A_sq = Array.ConvertAll(A, x => x * x);
Int64 acute = 0, right = 0, obtuse = 0;
int AiPlusAj = 0;
int squareSum = 0;
int max_obtuse = 0;
int max_right = 0;
int max_acute = 0;
int n_m_2 = n - 2;
int n_m_1 = n - 1;
for (int i = 0; i < n_m_2; i++)
{
for (int j = i + 1; j < n_m_1; j++)
{
AiPlusAj = A[i] + A[j];
squareSum = A_sq[i] + A_sq[j];
max_obtuse = Array.BinarySearch(A, j + 1, n - j - 1, AiPlusAj);
max_right = Array.BinarySearch(A_sq, j + 1, n - j - 1, squareSum);
max_acute = max_right < 0 ? ~max_right : max_right;
max_obtuse = max_obtuse < 0 ? ~max_obtuse : max_obtuse;
max_right = max_right < 0 ? ~max_right : max_right + 1;
obtuse += max_obtuse - max_right;
right += max_right - max_acute;
acute += max_acute - (j + 1);
}
}
Console.WriteLine(acute + " " + right + " " + obtuse);
}
}
}
dXNpbmcgU3lzdGVtOwoKbmFtZXNwYWNlIENvZGVTdG9ybQp7CiAgICBjbGFzcyBUcmlhbmdsZXMKICAgIHsKICAgICAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICAgICAgewogICAgICAgICAgICBpbnQgbiA9IGludC5QYXJzZShDb25zb2xlLlJlYWRMaW5lKCkpOwogICAgICAgICAgICBzdHJpbmdbXSBBX3RlbXAgPSBDb25zb2xlLlJlYWRMaW5lKCkuU3BsaXQoJyAnKTsKICAgICAgICAgICAgaW50W10gQSA9IEFycmF5LkNvbnZlcnRBbGwoQV90ZW1wLCBJbnQzMi5QYXJzZSk7CiAgICAgICAgICAgIGludFtdIEFfc3EgPSBBcnJheS5Db252ZXJ0QWxsKEEsIHggPT4geCAqIHgpOwoKICAgICAgICAgICAgSW50NjQgYWN1dGUgPSAwLCByaWdodCA9IDAsIG9idHVzZSA9IDA7CiAgICAgICAgICAgIGludCBBaVBsdXNBaiA9IDA7CiAgICAgICAgICAgIGludCBzcXVhcmVTdW0gPSAwOwoKICAgICAgICAgICAgaW50IG1heF9vYnR1c2UgPSAwOwogICAgICAgICAgICBpbnQgbWF4X3JpZ2h0ID0gMDsKICAgICAgICAgICAgaW50IG1heF9hY3V0ZSA9IDA7CgogICAgICAgICAgICBpbnQgbl9tXzIgPSBuIC0gMjsKICAgICAgICAgICAgaW50IG5fbV8xID0gbiAtIDE7CgogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5fbV8yOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBpICsgMTsgaiA8IG5fbV8xOyBqKyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQWlQbHVzQWogPSBBW2ldICsgQVtqXTsKICAgICAgICAgICAgICAgICAgICBzcXVhcmVTdW0gPSBBX3NxW2ldICsgQV9zcVtqXTsKCiAgICAgICAgICAgICAgICAgICAgbWF4X29idHVzZSA9IEFycmF5LkJpbmFyeVNlYXJjaChBLCBqICsgMSwgbiAtIGogLSAxLCBBaVBsdXNBaik7CiAgICAgICAgICAgICAgICAgICAgbWF4X3JpZ2h0ID0gQXJyYXkuQmluYXJ5U2VhcmNoKEFfc3EsIGogKyAxLCBuIC0gaiAtIDEsIHNxdWFyZVN1bSk7CiAgICAgICAgICAgICAgICAgICAgbWF4X2FjdXRlID0gbWF4X3JpZ2h0IDwgMCA/IH5tYXhfcmlnaHQgOiBtYXhfcmlnaHQ7CgogICAgICAgICAgICAgICAgICAgIG1heF9vYnR1c2UgPSBtYXhfb2J0dXNlIDwgMCA/IH5tYXhfb2J0dXNlIDogbWF4X29idHVzZTsKICAgICAgICAgICAgICAgICAgICBtYXhfcmlnaHQgPSBtYXhfcmlnaHQgPCAwID8gfm1heF9yaWdodCA6IG1heF9yaWdodCArIDE7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgb2J0dXNlICs9IG1heF9vYnR1c2UgLSBtYXhfcmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgcmlnaHQgKz0gbWF4X3JpZ2h0IC0gbWF4X2FjdXRlOwogICAgICAgICAgICAgICAgICAgIGFjdXRlICs9IG1heF9hY3V0ZSAtIChqICsgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoYWN1dGUgKyAiICIgKyByaWdodCArICIgIiArIG9idHVzZSk7CiAgICAgICAgfQogICAgfQp9Cg==