using System; // piesaista System
class TabulasSkol { // sāk klasi
    static void Main() { // sāk Main
        string pr = "ricards"; // vārds
        string uz = "brauns"; // uzvārds
        int[,] dt = RadasDatus(pr, uz); // ģenerē skaitļus
        DrukaGal(pr); // drukā galveni
        DrukaVisu(dt); // izvada tabulu
        int[,] tr = ApgrMas(dt); // transponē masīvu
        DrukaGal(pr); // drukā galveni
        DrukaVisu(tr); // izvada tabulu
    } // beidz Main

    static int[,] RadasDatus(string pr, string uz) { // veido 2D masīvu
        Random rnd = new Random(); // RNG
        int r = pr.Length; // rindas
        int c = uz.Length; // kolonnas
        int[,] m = new int[r, c]; // mat
        for (int i = 0; i < r; i++) // pa rindām
            for (int j = 0; j < c; j++) // pa kolonnām
                m[i, j] = rnd.Next(pr.Length, pr.Length + uz.Length + 1); // nejauši
        return m; // atgriež
    } // beidz RadasDatus

    static int[,] ApgrMas(int[,] d) { // transponē mat
        int nr = d.GetLength(1); // jaunrindu skaits
        int nc = d.GetLength(0); // jaunkolonnu skaits
        int[,] nm = new int[nr, nc]; // jauns mat
        for (int i = 0; i < nr; i++) // pa jaunrindām
            for (int j = 0; j < nc; j++) // pa jaunkolonnām
                nm[i, j] = d[j, i]; // apmaina indeksus
        return nm; // atgriež
    } // beidz ApgrMas

    static void DrukaGal(string p) { // drukā galveni
        Console.WriteLine($"\nTabula: {p}"); // nosaukums
        Zimes(3, 5); // augšlīnija
        Console.WriteLine("| Dati | sum | max | min |"); // kolonnas
        Zimes(3, 5); // viduslīnija
    } // beidz DrukaGal

    static void DrukaVisu(int[,] d) { // drukā visu tabulu
        for (int i = 0; i < d.GetLength(0); i++) { // pa rindām
            int[] r = new int[d.GetLength(1)]; // izveido rindas masīvu
            for (int j = 0; j < r.Length; j++) // pa kolonnām
                r[j] = d[i, j]; // piešķir vērtību
            int s = Sask(r); // saskaita
            int x = DabMax(r); // maksimālais
            int y = AtrMin(r); // minimālais
            DrukaR(r, s, x, y); // drukā rindu
        } // beidz for
        Zimes(3, 5); // apakšlīnija
    } // beidz DrukaVisu

    static int DabMax(int[] a) { // atrod maksimumu
        int m = a[0]; // sāk ar pirmo
        foreach (int v in a) // ej cauri
            if (v > m) m = v; // ja lielāks
        return m; // atgriež
    } // beidz DabMax

    static int AtrMin(int[] a) { // atrod minimumu
        int m = a[0]; // sāk ar pirmo
        foreach (int v in a) // ej cauri
            if (v < m) m = v; // ja mazāks
        return m; // atgriež
    } // beidz AtrMin

    static int Sask(int[] a) { // aprēķina summu
        int sum = 0; // sāk 0
        foreach (int v in a) // ej cauri
            sum += v; // pieskaita
        return sum; // atgriež
    } // beidz Sask

    static void DrukaR(int[] r, int s, int x, int y) { // drukā rindu
        Console.Write("| "); // sāk ar |
        foreach (int v in r) // pa kolonnām
            Console.Write(v + " | "); // izvada vērtību
        Console.Write($"sum | {s} | max | {x} | min | {y} |"); // statistika
        Console.WriteLine(); // jaunrinda
    } // beidz DrukaR

    static void Zimes(int a, int b) { // zīmē līniju
        for (int i = 0; i < b; i++) { // cik reizes
            Console.Write("*"); // zvaigzne
            for (int j = 0; j < a; j++) // svītras
                Console.Write("-"); // zīmē svītru
        } // beidz for
        Console.WriteLine("*"); // noslēdz
    } // beidz Zimes
} // beidz klasi
