Напиши алгоритм этой программы, чтобы я могла нарисовать блок схему

```
#include "Get.h"
#include "RusConsole.h"
#include "FileWork.h"
#include "Modules.h"

using namespace std;

void countCharacters(const string& text, const vector<char>& characters, unordered_map<char, int>& result) {
    for (char c : text) {
        if (find(characters.begin(), characters.end(), c) != characters.end()) {
            result[c]++;
        }
    }
}

void printResults(const unordered_map<char, int>& result) {
    cout << "\nРезультаты подсчета:\n";
    for (const auto& pair : result) {
        cout << "Символ '" << pair.first << "' встречается " << pair.second << " раз(а)\n";
    }
}

string readMultilineText() {
    string text;
    cout << "Введите текст (для завершения ввода введите 'EOF'):\n";
    string line;
    while (getline(cin, line)) {
        if (line == "EOF") {
            break;
        }
        text += line + "\n";
    }
    return text;
}

bool isValidTxtFile(const string& filename) {
    string extension = ".txt";
    return filename.size() >= extension.size() && filename.compare(filename.size() - extension.size(), extension.size(), extension) == 0;
}

void saveTextToFile(const string& text, const string& filename) {
    if (filename.empty()) {
        cerr << "Имя файла не может быть пустым.\n";
        return;
    }

    ofstream outFile(filename);
    if (outFile.is_open()) {
        outFile << text;
        outFile.close();
        cout << "Текст сохранен в файл '" << filename << "'\n";
    }
    else {
        cerr << "Не удалось открыть файл '" << filename << "' для записи.\n";
    }
}

void saveResultsToFile(const string& text, const unordered_map<char, int>& result, const string& filename) {
    if (filename.empty()) {
        cerr << "Имя файла не может быть пустым.\n";
        return;
    }

    ofstream outFile(filename);
    if (outFile.is_open()) {
        outFile << "Текст:\n";
        outFile << text << "\n";
        outFile << "Результаты подсчета:\n";
        for (const auto& pair : result) {
            outFile << "Символ '" << pair.first << "' встречается " << pair.second << " раз(а)\n";
        }
        outFile.close();
        cout << "Результаты сохранены в файл '" << filename << "'\n";
    }
    else {
        cerr << "Не удалось открыть файл '" << filename << "' для записи.\n";
    }
}

int main(int argc, char* argv[]) {
    ConsoleCP cp(1251);
    setlocale(LC_ALL, "Rus");
    string text;
    vector<char> characters;
    unordered_map<char, int> result;
    cout << "Баймухаметова Амина, 413 группа, вариант 2\n";
    cout << "Задан текст. Задано множество из N символов.\nПодсчитать количество вхождений в тексте каждого из символов массива.\n";
    cout << "В качестве исходных данных программа использует текст, считываемый\nиз файла или вводимый пользователем. Также пользователь\nвводит символы, которые будут подсчитываться.\n";
    while (true) {
        cout << "\nМеню:\n";
        cout << "1. Ввести текст и символы вручную\n";
        cout << "2. Считать текст из файла\n";
        cout << "3. Выйти\n";
        cout << "Выберите действие: ";
        int choice;
        choice = GetMenu3();
        cin.ignore(); // Очистка буфера после ввода числа

        switch (choice) {
        case 1: {
            text = readMultilineText();
            if (text.empty()) {
                cerr << "Введенный текст пустой. Пожалуйста, введите текст.\n";
                continue;
            }
            while (true) {
                cout << "\nСохранить написанный текст?\n";
                cout << "1. Да\n";
                cout << "2. Нет\n";
                cout << "Выберите действие: ";
                int choice1;
                choice1 = GetMenu2();
                cin.ignore(); // Очистка буфера после ввода числа
                if (choice1 == 1) {
                    string filename;
                    cout << "Введите имя файла для сохранения текста: ";
                    getline(cin, filename);
                    if (isValidTxtFile(filename)) {
                        saveTextToFile(text, filename);
                        break;
                    }
                    else {
                        cerr << "Недопустимое расширение файла. Допустимое расширение: .txt\n";
                    }
                }
                if (choice1 == 2) { break; }
            }

            int N;
            cout << "\nВведите количество символов (N): ";
            N = GetInt();
            cin.ignore(); // Очистка буфера после ввода числа

            characters.clear();
            cout << "Введите " << N << " символов через пробел: ";
            for (int i = 0; i < N; ++i) {
                char c;
                cin >> c;
                characters.push_back(c);
            }
            cin.ignore(); // Очистка буфера после ввода символов

            result.clear();
            countCharacters(text, characters, result);
            if (result.empty()) {
                cout << "Символы не были найдены в тексте.\n";
            }
            else {
                printResults(result);
            }

            while (true) {
                cout << "\nСохранить результат?\n";
                cout << "1. Да\n";
                cout << "2. Нет\n";
                cout << "Выберите действие: ";
                int choice1;
                choice1 = GetMenu2();
                cin.ignore(); // Очистка буфера после ввода числа
                if (choice1 == 1) {
                    string filename;
                    cout << "Введите имя файла для сохранения результата: ";
                    getline(cin, filename);
                    if (isValidTxtFile(filename)) {
                        saveResultsToFile(text, result, filename);
                        break;
                    }
                    else {
                        cerr << "Недопустимое расширение файла. Допустимое расширение: .txt\n";
                    }
                }
                if (choice1 == 2) { break; }
            }
            break;
        }
        case 2: {
            string filename;
            cout << "Введите имя файла: ";
            getline(cin, filename);

            if (isValidTxtFile(filename)) {
                ifstream inFile(filename);
                if (inFile.is_open()) {
                    text.clear();
                    string line;
                    while (getline(inFile, line)) {
                        text += line + "\n";
                    }
                    inFile.close();

                    if (text.empty()) {
                        cerr << "Текст из файла пустой. Пожалуйста, выберите другой файл.\n";
                        continue;
                    }

                    cout << "\nТекст из файла:\n";
                    cout << text << "\n";

                    int N;
                    cout << "Введите количество символов (N): ";
                    N = GetInt();
                    cin.ignore(); // Очистка буфера после ввода числа

                    characters.clear();
                    cout << "Введите " << N << " символов через пробел: ";
                    for (int i = 0; i < N; ++i) {
                        char c;
                        cin >> c;
                        characters.push_back(c);
                    }
                    cin.ignore(); // Очистка буфера после ввода символов

                    result.clear();

                    countCharacters(text, characters, result);
                    if (result.empty()) {
                        cout << "Символы не были найдены в тексте.\n";
                    }
                    else {
                        printResults(result);
                    }

                    while (true) {
                        cout << "\nСохранить результат?\n";
                        cout << "1. Да\n";
                        cout << "2. Нет\n";
                        cout << "Выберите действие: ";
                        int choice1;
                        choice1 = GetMenu2();
                        cin.ignore(); // Очистка буфера после ввода числа
                        if (choice1 == 1) {
                            string filename;
                            cout << "Введите имя файла для сохранения результата: ";
                            getline(cin, filename);
                            if (isValidTxtFile(filename)) {
                                saveResultsToFile(text, result, filename);
                                break;
                            }
                            else {
                                cerr << "Недопустимое расширение файла. Допустимое расширение: .txt\n";
                            }
                        }
                        if (choice1 == 2) { break; }
                    }
                }
                else {
                    cerr << "Не удалось открыть файл '" << filename << "'.\n";
                }
            }
            else {
                cerr << "Недопустимое расширение файла. Допустимое расширение: .txt\n";
            }
            break;
        }
        case 3: {
            cout << "Выход из программы.\n";
            return 0;
        }
        default: {
            cout << "Неверный выбор. Попробуйте снова.\n";
            break;
        }
        }
    }

    return 0;
}
```