using System;
class Program
{
public static (int First, int Second) MaxProductPair(int[] arr) {
if (arr == null || arr.Length < 2)
throw new ArgumentException("Array must contain at least two elements.");
int max1 = int.MinValue, max2 = int.MinValue;
int min1 = int.MaxValue, min2 = int.MaxValue;
foreach (int x in arr) {
// Track two largest values
if (x > max1) {
max2 = max1;
max1 = x;
}
else if (x > max2) {
max2 = x;
}
// Track two smallest values
if (x < min1) {
min2 = min1;
min1 = x;
}
else if (x < min2) {
min2 = x;
}
}
long prodMax = (long)max1 * max2;
long prodMin = (long)min1 * min2;
return prodMax >= prodMin
? (max1, max2)
: (min1, min2);
}
static void Main()
{
var arr = new[] { 3, 9, 1, 3, 8, 0, 4 };
var pair = MaxProductPair(arr);
Console.WriteLine($"Max product pair: {pair.First}, {pair.Second}");
}
}
/*
run:
Max product pair: 9, 8
*/