#include <iostream>
#include <fstream>
#include <random>
#include <string>
#include <vector>
#include <chrono>

std::string generate_email(std::mt19937& gen) {
    const std::vector<std::string> domains = {"gmail.com", "yahoo.com", "hotmail.com"};
    const std::string chars = "abcdefghijklmnopqrstuvwxyz0123456789";
    
    std::uniform_int_distribution<> length_dist(5, 15);
    std::uniform_int_distribution<> char_dist(0, chars.size() - 1);
    std::uniform_int_distribution<> domain_dist(0, domains.size() - 1);
    
    int length = length_dist(gen);
    std::string username;
    for (int i = 0; i < length; ++i) {
        username += chars[char_dist(gen)];
    }
    
    return username + "@" + domains[domain_dist(gen)];
}

std::string generate_password(std::mt19937& gen) {
    const std::string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*";
    std::uniform_int_distribution<> length_dist(8, 16);
    std::uniform_int_distribution<> char_dist(0, chars.size() - 1);
    
    int length = length_dist(gen);
    std::string password;
    for (int i = 0; i < length; ++i) {
        password += chars[char_dist(gen)];
    }
    return password;
}

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    
    int count;
    std::cout << "Сколько комбинаций? ";
    std::cin >> count;
    
    std::string filename;
    std::cout << "Имя файла: ";
    std::cin >> filename;
    
    auto start = std::chrono::high_resolution_clock::now();
    
    std::ofstream file(filename);
    for (int i = 0; i < count; ++i) {
        std::string email = generate_email(gen);
        std::string password = generate_password(gen);
        file << email << ":" << password << "\n";
        
        if ((i + 1) % 100000 == 0) {
            std::cout << "Сгенерировано: " << (i + 1) << std::endl;
        }
    }
    file.close();
    
    auto end = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    
    std::cout << "Готово! " << count << " комбинаций за " << duration.count() << " мс" << std::endl;
    
    return 0;
}