using System.Text;

namespace ConsoleApp1;

class Program{
    //Tresais uzdevums, veidoja Markuss Labrencis 3.24.2025. Uz Windows 11 24H2 (26100.3476)
    static void Main(){
        Console.Write("Ievadi teikumu: ");
        string teikums = Console.ReadLine();

        Console.Write("Samainiti vardi: ");
        string reversa1 = reverset(teikums);
        Console.WriteLine(reversa1);

        Console.Write("Samainiti burti vardos: ");
        string reversa2 = reverset2(teikums);
        Console.WriteLine(reversa2);
        
        //veido piramidas lidzigu figuru
        centret(teikums);
        //veido piramidas lidzigu figuru preteji pirmajai
        preteji(teikums);
        //veido trepes no labas puses
        atklat(teikums);
        //veido trepes no kreisas puse un apgriezta seciba
        atklat2(teikums);
    }

    /**
     * reverse vardu secibu teikuma
     */
    static string reverset(string teikums){
        //sadala teikumu vardos
        string[] vardi = teikums.Split(' ');
        //apgriez vardu secibu
        Array.Reverse(vardi);

        //parveido pirmo vardu ar lielo sakumburtu parejos uz maziem
        if (vardi.Length > 0){
            vardi[0] = kapitalizet(vardi[0]);
            for (int i = 1; i < vardi.Length; i++){
                vardi[i] = vardi[i].ToLower();
            }
        }

        //saliek visu viena stringa(teikuma)
        return string.Join(" ", vardi);
    }

    /**
     * apgriez burtus katra varda
     */
    static string reverset2(string teikums){
        string[] vardi = teikums.Split(' ')
            .Select(word => new string(word.Reverse().ToArray()))
            .ToArray();

        //parveido pirmo vardu ar lielo sakumburtu, parajos uz mazajiem
        if (vardi.Length > 0){
            vardi[0] = kapitalizet(vardi[0]);
            for (int i = 1; i < vardi.Length; i++){
                vardi[i] = vardi[i].ToLower();
            }
        }

        //atkal stringa ieliekm vardus
        return string.Join(" ", vardi);
    }

    /**
     * parvers varda pirmo burtu lielo, parejoz uz mazjaiem
     */
    static string kapitalizet(string vards){
        if (string.IsNullOrEmpty(vards))
            return vards;

        return char.ToUpper(vards[0]) + vards.Substring(1).ToLower();
    }

    /**
     * attelo tekstu centreti
     */
    static void centret(string teikums){
        int vidus = teikums.Length / 2;
        StringBuilder bilderis = new StringBuilder();

        for (int i = 0; i <= vidus; i++){
            int kreisas = vidus - i;
            int labas = vidus + i;

            bilderis.Clear();

            //aizpilda ar atstarpam un atstaj redzamu tikai sobridejo dalu
            for (int j = 0; j < teikums.Length; j++){
                if (j >= kreisas && j <= labas)
                    bilderis.Append(teikums[j]);
                else
                    bilderis.Append(' ');
            }

            Console.WriteLine(bilderis);
        }
    }

    /**
     * aizvieto tekstu ar atstarpem sakot no centra
     */
    static void preteji(string teikums){
        char[] chari = teikums.ToCharArray();
        int kreisas = teikums.Length / 2;
        int labais = (teikums.Length % 2 == 0) ? kreisas - 1 : kreisas;

        //aizvieto rakstzames ar atstarpam, parvietojoties uz arpusi no centra
        while (kreisas >= 0 && labais < teikums.Length){
            chari[kreisas] = ' ';
            chari[labais] = ' ';
            Console.WriteLine(new string(chari));
            kreisas--;
            labais++;
        }
    }

    /**
     * atklaj tekstu no beigam uz sakumu
     */
    static void atklat(string teikums){
        StringBuilder bilderis = new StringBuilder(new string(' ', teikums.Length));

        //aizpilda no beigam uz sakumu
        for (int i = teikums.Length - 1; i >= 0; i--){
            bilderis[i] = teikums[i];
            Console.WriteLine(bilderis);
        }
    }

    /**
     * atklaj tekstu no sakuma uz beigam, izvada apgriezta seciba
     */
    static void atklat2(string text){
        StringBuilder bilderis = new StringBuilder();
        List<String> linijas = new List<string>();

        //uzkrāj solus saraksta
        for (int i = 0; i < text.Length; i++){
            bilderis.Append(text[i]);
            linijas.Add(bilderis.ToString());
        }

        //izvada linijas apgriezta veida
        for (int i = linijas.Count - 1; i >= 0; i--){
            Console.WriteLine(linijas[i]);
        }
    }
}