using
System;
using
System.Collections.Generic;
class
GFG {
static
void
getPairsMerge(
int
[] arr,
int
l,
int
r,
int
mid, List<
int
[]> p)
{
int
[] b =
new
int
[l + r + 1];
int
i = l, k = l, j = mid + 1;
while
(i <= mid && j <= r) {
if
(arr[i] > arr[j]) {
b[k] = arr[j];
p.Add(
new
[] { arr[i], arr[j] });
p.Add(
new
[] { arr[j], arr[i] });
p.Add(
new
[] { arr[j], arr[j] });
k++;
j++;
}
else
{
p.Add(
new
[] { arr[i], arr[j] });
p.Add(
new
[] { arr[j], arr[i] });
p.Add(
new
[] { arr[i], arr[i] });
b[k] = arr[i];
i++;
k++;
}
}
while
(i <= mid) {
b[k] = arr[i];
p.Add(
new
[] { arr[i], arr[i] });
i++;
k++;
}
while
(j <= r) {
b[k] = arr[j];
p.Add(
new
[] { arr[j], arr[j] });
j++;
k++;
}
for
(
int
x = l; x <= r; x++) {
arr[x] = b[x];
}
}
static
void
getAllPairs(
int
[] arr,
int
l,
int
r,
List<
int
[]> p)
{
if
(l < r) {
int
mid = (l + r) / 2;
getAllPairs(arr, l, mid, p);
getAllPairs(arr, mid + 1, r, p);
getPairsMerge(arr, l, r, mid, p);
}
}
public
static
void
Main(
string
[] args)
{
int
n = 2;
int
[] arr = { 1, 2 };
List<
int
[]> p =
new
List<
int
[]>();
getAllPairs(arr, 0, n - 1, p);
foreach
(
var
it
in
p)
Console.WriteLine(it[0] +
" "
+ it[1]);
}
}