using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        // Ievada vārdu un uzvārdu
        Console.Write("ievada vardu: ");
        string vards = Console.ReadLine();
        Console.Write("ievada uzvardu: ");
        string uzvards = Console.ReadLine();

        // Formatē vārdu un uzvārdu
        string fVards = FormatText(vards);
        string fUzvards = FormatText(uzvards);

        // Oriģinālās tabulas izmēri
        int originalRows = uzvards.Length + 2;
        int originalCols = vards.Length + 1;
        int[,] tabula = new int[originalRows, originalCols];
        Random rand = new Random();

        // Aizpilda tabulu ar random skaitļiem
        for (int i = 1; i < originalRows - 1; i++)
        {
            for (int j = 1; j < originalCols; j++)
            {
                tabula[i, j] = rand.Next(vards.Length, vards.Length + uzvards.Length + 1);
            }
        }

        // Izdrukā oriģinālo tabulu
        PrintTable(tabula, fVards, fUzvards, vards.Length);

        // Transponētās tabulas izmēri
        int transposedRows = vards.Length + 2;
        int transposedCols = uzvards.Length + 1;
        int[,] transposedTabula = new int[transposedRows, transposedCols];

        // Aizpilda transponēto tabulu
        for (int x = 1; x <= vards.Length; x++)
        {
            for (int y = 1; y <= uzvards.Length; y++)
            {
                transposedTabula[x, y] = tabula[y, x];
            }
        }

        // Apgriež uzvārdu un vārdu
        string reversedFUzvards = ReverseString(fUzvards);
        string reversedFVards = ReverseString(fVards);
        PrintTable(transposedTabula, reversedFUzvards, reversedFVards, uzvards.Length);
    }

    // Formatē tekstu (pāra - lielie burti, nepāra - mazie)
    static string FormatText(string text)
    {
        char[] chars = text.ToCharArray();
        for (int i = 0; i < chars.Length; i++)
        {
            if (i % 2 == 0)
                chars[i] = char.ToUpper(chars[i]);
            else
                chars[i] = char.ToLower(chars[i]);
        }
        return new string(chars);
    }

    // Apgriež virkni
    static string ReverseString(string s)
    {
        char[] arr = s.ToCharArray();
        Array.Reverse(arr);
        return new string(arr);
    }

    // Drukā tabulu ar norādītajiem parametriem
    static void PrintTable(int[,] table, string fVards, string fUzvards, int nameLength)
    {
        int rows = table.GetLength(0);
        int cols = table.GetLength(1);

        // Veido augšējo un vidējo līniju formatēšanai
        string middleLine = "";
        string topLine = "*";
        for (int i = 0; i < nameLength + 1; i++)
        {
            topLine += "=====*";       // Virsraksta līnija
            middleLine += "+-----";    // Vidējā atdalītājlīnija
        }
        topLine += "=====*=====*=====*";       // Pievieno SUM/MIN/MAX kolonnām
        middleLine += "*=====*=====*=====*";   // Pievieno SUM/MIN/MAX atdalītājus

        // Druka tabulas galveni
        Console.WriteLine(topLine);
        Console.Write("|  x  ");
        foreach (char c in fVards)
            Console.Write($"|  {c}  ");  // Kolonnu virsraksti
        Console.WriteLine("| sum | min | max |");
        Console.WriteLine(topLine);

        // Aizpilda datu rindas
        for (int i = 1; i < rows - 1; i++)
        {
            Console.Write("| ");
            int sum = 0;
            int min = int.MaxValue;
            int max = int.MinValue;

            for (int j = 0; j < cols; j++)
            {
                if (j == 0)
                    // Pirma kolonna
                    Console.Write($" {fUzvards[fUzvards.Length - i]}  | ");
                else
                {
                    // Datu šūnas un sum/min/max aprēķins
                    int value = table[i, j];
                    sum += value;
                    if (value < min) min = value;
                    if (value > max) max = value;
                    Console.Write($"{value,3} | ");
                }
            }
            // Izvada rindas sum, min, max
            Console.WriteLine($"{sum,3} | {min,3} | {max,3} |");
            if (i < rows - 2) Console.WriteLine(middleLine); // Vidējā līnija starp rindām
        }
        Console.WriteLine(topLine);

        // SUM rindas drukāšana
        Console.Write("| sum |");
        int totalSum = 0;
        for (int j = 1; j < cols; j++)
        {
            int colSum = 0;
            for (int i = 1; i < rows - 1; i++)
                colSum += table[i, j];
            Console.Write($" {colSum,3} |");
            totalSum += colSum;
        }
        Console.WriteLine($" {totalSum,3} |  *  |  *  |");
        Console.WriteLine(topLine);

        // MIN rindas drukāšana
        Console.Write("| Min |");
        int overallMin = int.MaxValue;
        for (int j = 1; j < cols; j++)
        {
            int colMin = int.MaxValue;
            for (int i = 1; i < rows - 1; i++)
                if (table[i, j] < colMin) colMin = table[i, j];
            Console.Write($" {colMin,3} |");
            if (colMin < overallMin) overallMin = colMin;
        }
        Console.WriteLine($"  *  | {overallMin,3} |  *  |");
        Console.WriteLine(topLine);

        // MAX rindas drukāšana
        Console.Write("| Max |");
        int overallMax = int.MinValue;
        for (int j = 1; j < cols; j++)
        {
            int colMax = int.MinValue;
            for (int i = 1; i < rows - 1; i++)
                if (table[i, j] > colMax) colMax = table[i, j];
            Console.Write($" {colMax,3} |");
            if (colMax > overallMax) overallMax = colMax;
        }
        Console.WriteLine($"  *  |  *  | {overallMax,3} |");
        Console.WriteLine(topLine);
    }
}