Advertisement
FOOZBY

.h

Nov 28th, 2019
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.88 KB | None | 0 0
  1. /*#include <iostream>
  2. #include <fstream>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <conio.h>
  6. #include <Windows.h>
  7. #include <ctime>
  8. #include <bitset>
  9. #include <string>
  10. #include <fstream>
  11. #include <Windows.h>*/
  12. #include <iostream>
  13. #include <fstream>
  14. #include <string>
  15. #include <string.h>
  16. #include <stdio.h>
  17. #include <conio.h>
  18. #include <Windows.h>
  19. #include <ctime>
  20. #include <bitset>
  21. #pragma
  22. using namespace std;
  23. HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
  24. void readFromFile(string& nameCheck, string& passCheck,int& a)
  25. {
  26.     ifstream fin;
  27.     fin.open("data.txt");
  28.     if (fin.is_open())
  29.     {
  30.         getline(fin, nameCheck);
  31.         getline(fin, passCheck);
  32.     }
  33.     else
  34.     {
  35.         a = 0;
  36.     }
  37. }
  38. void getword();
  39. void check(string name, string pass)
  40. {
  41.     string nameCheck, passCheck;
  42.     int a;
  43.     readFromFile(nameCheck, passCheck, a);
  44.     if (a != 0)
  45.     {
  46.         if (name != nameCheck)
  47.         {
  48.             cout << "Логин введён неправильно,попробуйте ещё раз\n" << endl;
  49.             getword();
  50.         }
  51.         else if (pass != passCheck)
  52.         {
  53.             cout << "Пароль введён непрвильно,в наказание,введите логин заного\n" << endl;
  54.             getword();
  55.         }
  56.         else
  57.         {
  58.             cout << "добро пожаловать в ад" << endl;
  59.         }
  60.     }
  61.     else
  62.     {
  63.         cout << "Ошибка открытия файла,закройте программу,создайте файл <data.txt> и попробуйте снова" << endl;
  64.     }
  65. }
  66. void getword()
  67. {
  68.     string name, pass;
  69.     cout << "Введите логин" << endl;
  70.     cin >> name;
  71.     cout << "Введите пароль" << endl;
  72.     for (;;)
  73.     {
  74.         auto code = _getch();
  75.         if (code == 13)
  76.         {
  77.             cout << endl;
  78.             break;
  79.         }
  80.  
  81.         if (code == 224)
  82.             _getch(),
  83.             code = 8;
  84.  
  85.         if (code == 8)
  86.         {
  87.             std::cout << "\b \b";
  88.             if (!pass.empty())
  89.                 pass.pop_back();
  90.         }
  91.         else
  92.         {
  93.             const auto ch = static_cast<char>(code);
  94.             pass += ch;
  95.             std::cout << "*";
  96.         }
  97.  
  98.     }
  99.     check(name, pass);
  100. }
  101. int failcin()
  102. {
  103.     while (true) {
  104.         int userNumber;
  105.         cin >> userNumber;
  106.         if (cin.fail() || userNumber < 0) {
  107.             cin.clear();
  108.             cin.ignore(cin.rdbuf()->in_avail());
  109.             cout << endl << "Попробуйте ввести корректное число: ";
  110.         }
  111.         else {
  112.             cin.ignore(cin.rdbuf()->in_avail());
  113.             return userNumber;
  114.         }
  115.     }
  116. }
  117. int failcinf()
  118. {
  119.     while (true) {
  120.         int userNumber;
  121.         cin >> userNumber;
  122.         if (cin.fail() || userNumber > 100) {
  123.             cin.clear();
  124.             cin.ignore(cin.rdbuf()->in_avail());
  125.             cout << endl << "Попробуйте ввести корректное число: ";
  126.         }
  127.         else {
  128.             cin.ignore(cin.rdbuf()->in_avail());
  129.             return userNumber;
  130.         }
  131.     }
  132. }
  133. int failcinj()
  134. {
  135.     while (true)
  136.     {
  137.         int userNumber;
  138.         cin >> userNumber;
  139.         if (cin.fail())
  140.         {
  141.             cin.clear();
  142.             cin.ignore(cin.rdbuf()->in_avail());
  143.             cout << endl << "Попробуйте ввести корректное число: ";
  144.         }
  145.         else if (userNumber == 0 || userNumber == 1 || userNumber == 2 || userNumber == 3 || userNumber == 4 || userNumber == 5 )
  146.         {
  147.             cin.ignore(cin.rdbuf()->in_avail());
  148.             return userNumber;
  149.         }
  150.         else
  151.             cout << endl << "Попробуйте ввести корректное число: ";
  152.     }
  153. }
  154. int failcinw()
  155. {
  156.     while (true) {
  157.         int userNumber;
  158.         cin >> userNumber;
  159.         if (cin.fail()) {
  160.             cin.clear();
  161.             cin.ignore(cin.rdbuf()->in_avail());
  162.             cout << endl << "Попробуйте ввести корректное число: ";
  163.         }
  164.         else {
  165.             cin.ignore(cin.rdbuf()->in_avail());
  166.             return userNumber;
  167.         }
  168.     }
  169. }
  170. void enter()
  171. {
  172.     setlocale(LC_ALL, "");
  173.     string userpass, username, Userpassword, name, pass;
  174.     int option;
  175.     cout << "0.регистрация пользователя\n";
  176.     cout << "1.вход пользователя\n";
  177.     option = failcin();
  178.     switch (option)
  179.     {
  180.     case 0:
  181.     {
  182.         cout << "регистрация\n";
  183.         cout << "имя пользователя:\n";
  184.         cin >> userpass;
  185.         cout << "пароль пользователя:\n";
  186.         cin >> Userpassword;
  187.         ofstream fout("data.txt"); // создаём объект класса ofstream для записи и связываем его с файлом cppstudio.txt
  188.         fout << userpass << endl << Userpassword; // запись строки в файл
  189.         fout.close(); // закрываем файл
  190.     }
  191.     break;
  192.     default:
  193.     {
  194.         cout << "Авторизация: \n";
  195.         getword();
  196.         system("pause");
  197.     }
  198.     break;
  199.     }
  200. }
  201. void groupnumber()
  202. {
  203.     short int a = 9894;
  204.     int i = 16;
  205.     bool r2;
  206.     r2 = a & (1U << --i);
  207.     SetConsoleTextAttribute(h, 05);
  208.     cout << r2 << " ";
  209.     for (--i; i >= 0; --i)
  210.     {
  211.         r2 = a & (1U << i);
  212.         if (i % 4 == 0)
  213.         {
  214.             SetConsoleTextAttribute(h, 02);
  215.             cout << r2 << " ";
  216.         }
  217.         else
  218.         {
  219.             SetConsoleTextAttribute(h, 02);
  220.             cout << r2;
  221.         }
  222.     }
  223.     cout << " \n";
  224. }
  225. string scndname()
  226. {
  227.     string scnd = "Шаронин";
  228.     string binscnd;
  229.     for (size_t i = 0; i < scnd.size(); ++i)
  230.     {
  231.         bitset<8> b(scnd.c_str()[i]);
  232.         binscnd += b.to_string();
  233.     }
  234.     return binscnd;
  235. }
  236. void greetingN()
  237. {
  238.     char name[9999] = "пользователь N";
  239.     cout << "Приветствую, тебя," << name << ", На улице такая вьюга. Присаживайся у очага, здесь тебе всегда рады\n";
  240.     cout << "Эту программу написал студент группы 9894, Шаронин Алексей.\nКстати, в памяти моего компьютера номер мой группы выглядит как: \n";
  241.     groupnumber();
  242.     SetConsoleTextAttribute(h, 07);
  243.     cout << "\n";
  244.     SetConsoleTextAttribute(h, 07);
  245.     cout << "А Фамилия как \n";
  246.     cout << scndname();
  247.     cout << endl;
  248.     system("pause");
  249. }
  250. void greeting()
  251. {
  252.     char name[9999]; // буфер промежуточного хранения считываемого из файла текста
  253.     ifstream fin("data.txt"); // открыли файл для чтения
  254.     fin >> name; // считали первое слово из файла
  255.     fin.close(); // закрываем файл
  256.     cout << "Приветствую, тебя," << name << ", На улице такая вьюга. Присаживайся у очага, здесь тебе всегда рады\n";
  257.     cout << "Эту программу написал студент группы 9894, Шаронин Алексей. Кстати, в памяти моего компьютера номер мой группы выглядит как: \n";
  258.     groupnumber();
  259.     SetConsoleTextAttribute(h, 07);
  260.     cout << "А Фамилия как \n";
  261.     cout << scndname();
  262.     cout << endl;
  263.     system("pause");
  264. }
  265. void showmas(int* A, int count) {
  266.     if (count == 0)
  267.         cout << "нет массива" << endl;
  268.     else {
  269.         for (int i = 0; i < count; ++i)
  270.             cout << A[i] << " ";
  271.         cout << endl;
  272.     }
  273. }
  274. void inputARRFromFile(int*& A, int& elements)
  275. {
  276.     ifstream in("arrtest.txt");
  277.     if (in.is_open())
  278.     {
  279.         int temp;
  280.         while (!in.eof())
  281.         {
  282.             in >> temp;
  283.             ++elements;
  284.         }
  285.         in.seekg(0, ios::beg);
  286.         in.clear();
  287.         --elements;
  288.         in.close();
  289.         ifstream in("arrtest.txt");
  290.         A = new int[elements];
  291.         while (true)
  292.         {
  293.             for (int i = 0; i < elements; i++)
  294.             {
  295.                 in >> A[i];
  296.             }
  297.             if (!in.eof())
  298.             {
  299.                 for (int i = 0; i < elements; i++)
  300.                 {
  301.                     cout << A[i] << " ";
  302.                 }
  303.             }
  304.             else
  305.                 break;
  306.             in.close();
  307.         }
  308.  
  309.     }
  310.     else
  311.     {
  312.         cout << "Файл с именем 'arrtest.txt' не найден." << endl << endl;
  313.     }
  314. }
  315. void bubble(int* A, int count)
  316. {
  317.     int t = 0;
  318.     for (int i = 0; i < count; ++i)
  319.     {
  320.         for (int j = 0; j < count - 1; ++j)
  321.         {
  322.             if (A[j] > A[j + 1])
  323.             {
  324.                 t = A[j];
  325.                 A[j] = A[j + 1];
  326.                 A[j + 1] = t;
  327.  
  328.             }
  329.         }
  330.     }
  331. }
  332. void swap(int* first, int* second)
  333. {
  334.     *first = *first + *second;
  335.     *second = *first - *second;
  336.     *first = *first - *second;
  337. }
  338. void shaker(int* A, int count)
  339. {
  340.     int left = 0, right = count - 1;
  341.     bool motion = 1;
  342.     int t = 0;
  343.     while ((left < right) && motion == 1)
  344.     {
  345.         motion = 0;
  346.         for (int i = left; i < right; ++i)
  347.         {
  348.             if (A[i] > A[i + 1])
  349.             {
  350.                 t = A[i];
  351.                 A[i] = A[i + 1];
  352.                 A[i + 1] = t;
  353.                 motion = 1;
  354.             }
  355.         }
  356.         --right;
  357.         for (int i = right; i > left; --i)
  358.         {
  359.             if (A[i - 1] > A[i])
  360.             {
  361.                 swap(&A[i - 1], &A[i]);
  362.                 motion = 1;
  363.             }
  364.         }
  365.         ++left;
  366.     }
  367. }
  368. void insert(int* A, int count)
  369. {
  370.     int i, k, j;
  371.     for (i = 1; i < count; ++i)
  372.     {
  373.         k = A[i];
  374.         j = i - 1;
  375.         while (j >= 0 && A[j] > k)
  376.         {
  377.             A[j + 1] = A[j];
  378.             --j;
  379.         }
  380.         A[j + 1] = k;
  381.     }
  382. }
  383. void quick(int* A, int start, int end)
  384. {
  385.     int i = start, j = end, tmp;
  386.     int separator = A[(start + end) / 2];
  387.     while (i <= j)
  388.     {
  389.         while (A[i] < separator)
  390.             ++i;
  391.         while (A[j] > separator)
  392.             --j;
  393.         if (i <= j)
  394.         {
  395.             tmp = A[i];
  396.             A[i] = A[j];
  397.             A[j] = tmp;
  398.             ++i;
  399.             --j;
  400.         }
  401.     }
  402.     if (start < j)
  403.         quick(A, start, j);
  404.     if (i < end)
  405.         quick(A, i, end);
  406. }
  407. void comb(int* A, int count)
  408. {
  409.     int gap = count;
  410.     bool motion = 1;
  411.     while (gap != 1 || motion == 1)
  412.     {
  413.         gap = (gap * 10) / 13;
  414.         if (gap < 1)
  415.             gap = 1;
  416.         motion = 0;
  417.         for (int i = 0; i < count - gap; ++i)
  418.         {
  419.             if (A[i] > A[i + gap])
  420.             {
  421.                 int t = A[i];
  422.                 A[i] = A[i + 1];
  423.                 A[i + 1] = t;
  424.                 motion = 1;
  425.             }
  426.         }
  427.     }
  428. }
  429. void sorts(int* ARR, int rows)
  430. {
  431.     cout << "выберите метод сортировки:1-Bubble Sort,2-Shaker Sort,3-Insert Sort,4-Quick Sort,5-Comb Sort\n";
  432.     cout << "Ваш выбор: ";
  433.     int opt = failcinj();
  434.     switch (opt)
  435.     {
  436.     case 1:
  437.     {
  438.         bubble(ARR, rows);
  439.     }
  440.     break;
  441.     case 2:
  442.     {
  443.         shaker(ARR, rows);
  444.     }
  445.     break;
  446.     case 3:
  447.     {
  448.         insert(ARR, rows);
  449.     }
  450.     break;
  451.     case 4:
  452.     {
  453.         quick(ARR, 0, rows - 1);
  454.     }
  455.     break;
  456.     case 5:
  457.     {
  458.         comb(ARR, rows);
  459.     }
  460.     break;
  461.     }
  462.     showmas(ARR, rows);
  463. }
  464. int f(int n)
  465. {
  466.     if (n == 1 || n == 2)
  467.         return 1;
  468.     if (n == 0)
  469.         return 0;
  470.     return f(n - 1) + f(n - 2);
  471. }
  472. void mas()
  473. {
  474.     srand(unsigned(time(NULL)));
  475.     setlocale(0, "ru");
  476.     cout << "метод заполнения\n";
  477.     cout << "0.ручками\n";
  478.     cout << "1.рандом\n";
  479.     cout << "2.с файла\n";
  480.     int option = failcin();
  481.     switch (option)
  482.     {
  483.     case 0:
  484.     {
  485.         int h = 0, rows = 0;
  486.         int el = 0;
  487.         int* fib = new int[el];
  488.         int* ARR = new int[rows];
  489.         cout << "введите количевство элементов в массиве(не больше 100): ";
  490.         rows = failcinf();
  491.         for (int i = 0; i < rows; i++)
  492.         {
  493.             cout << "Введите значение элемента с индексом [" << i + 1 << "]";
  494.             cin >> ARR[i];
  495.         }
  496.         showmas(ARR, rows);
  497.         cout << "числа Фибоначчи: ";
  498.         for (int i = 0; i < 15; ++i)
  499.             cout << f(i) << " ";
  500.         cout << endl;
  501.         for (int i = 0; i < 15; i++)
  502.         {
  503.             fib[i] = f(i);
  504.         }
  505.         for (int i = 0; i < 15; i++)
  506.         {
  507.             if (ARR[i] == fib[i])
  508.                 ++h;
  509.             else
  510.             {
  511.                 break;
  512.             }
  513.         }
  514.         if (h == 15)
  515.         {
  516.             cout << "первые 15 чисел явл Фибоначчи\n";
  517.         }
  518.         else
  519.         {
  520.             cout << "первые 15 чисел не явл Фибоначчи\n";
  521.         }
  522.         cout << h << " чисел Фибоначчи\n";
  523.         sorts(ARR, rows);
  524.         if (rows % 2 == 1)
  525.             cout << "Медиана массива: " << ARR[rows / 2] << endl;
  526.         else
  527.             cout << "Медиана массива: " << (ARR[rows / 2 - 1] + ARR[rows / 2]) / 2 << endl;
  528.         int arrayOfCount[100] = {};
  529.         for (int i = 0; i < rows; ++i)
  530.             ++arrayOfCount[ARR[i]];
  531.         int maxElement = arrayOfCount[0];
  532.         for (int i = 1; i < 100; ++i) {
  533.             if (maxElement < arrayOfCount[i])
  534.                 maxElement = arrayOfCount[i];
  535.         }
  536.         int countSummary = 0;
  537.         cout << "Мода(ы) массива: ";
  538.         for (int i = 0; i < 100; ++i) {
  539.             if (arrayOfCount[i] == maxElement) {
  540.                 cout << i << " ";
  541.                 ++countSummary;
  542.             }
  543.         }
  544.         cout << endl;
  545.         break;
  546.     }
  547.     case 1:
  548.     {
  549.         int h = 0;
  550.         const int rows = 50;
  551.         int* ARR = new int[rows];
  552.         int el = 0;
  553.         int* fib = new int[el];
  554.         for (int i = 0; i < rows; i++)
  555.         {
  556.             ARR[i] = rand() % 100;
  557.         }
  558.         cout << endl;
  559.         cout << "числа фибоначчи: ";
  560.         for (int i = 0; i < 15; ++i)
  561.             cout << f(i) << " ";
  562.         cout << endl;
  563.         for (int i = 0; i < rows; i++)
  564.         {
  565.             cout << ARR[i] << " ";
  566.         }
  567.         cout << endl;
  568.         for (int i = 0; i < 15; i++)
  569.         {
  570.             fib[i] = f(i);
  571.         }
  572.         for (int i = 0; i < 15; i++)
  573.         {
  574.             if (ARR[i] == fib[i])
  575.                 ++h;
  576.             else
  577.             {
  578.                 h = 0;
  579.             }
  580.         }
  581.         if (h==15)
  582.         {
  583.             cout << "первые 15 чисел явл фиб\n";
  584.         }
  585.         else
  586.         {
  587.             cout << "первые 15 чисел не явл фиб\n";
  588.         }
  589.         sorts(ARR, rows);
  590.         if (rows % 2 == 1)
  591.             cout << "Медиана массива: " << ARR[rows / 2] << endl;
  592.         else
  593.             cout << "Медиана массива: " <<(ARR[rows / 2 - 1] + ARR[rows / 2]) / 2 << endl;
  594.         int arrayOfCount[100] = {};
  595.         for (int i = 0; i < rows; ++i)
  596.             ++arrayOfCount[ARR[i]];
  597.         int maxElement = arrayOfCount[0];
  598.         for (int i = 1; i < 100; ++i) {
  599.             if (maxElement < arrayOfCount[i])
  600.                 maxElement = arrayOfCount[i];
  601.         }
  602.         int countSummary = 0;
  603.         cout << "Мода(ы) массива: ";
  604.         for (int i = 0; i < 100; ++i) {
  605.             if (arrayOfCount[i] == maxElement) {
  606.                 cout << i << " ";
  607.                 ++countSummary;
  608.             }
  609.         }
  610.         cout << endl;
  611.         break;
  612.     }
  613.     case 2:
  614.     {
  615.         int h = 0, rows = 0;
  616.         int el = 0;
  617.         int* fib = new int[el];
  618.         int* ARR = new int[rows];
  619.         inputARRFromFile(ARR, rows);
  620.         cout << "числа фибоначчи: ";
  621.         for (int i = 0; i < 15; ++i)
  622.             cout << f(i) << " ";
  623.         cout << endl;
  624.         for (int i = 0; i < 15; i++)
  625.         {
  626.             fib[i] = f(i);
  627.         }
  628.         for (int i = 0; i < 15; i++)
  629.         {
  630.             if (ARR[i] == fib[i])
  631.                 ++h;
  632.             else
  633.             {
  634.                 h = 0;
  635.             }
  636.         }
  637.         if (h == 15)
  638.         {
  639.             cout << "первые 15 чисел явл фиб\n";
  640.         }
  641.         else
  642.         {
  643.             cout << "первые 15 чисел не явл фиб\n";
  644.         }
  645.         sorts(ARR, rows);
  646.         if (rows % 2 == 1)
  647.             cout << "Медиана массива: " << ARR[rows / 2] << endl;
  648.         else
  649.             cout << "Медиана массива: " << (ARR[rows / 2 - 1] + ARR[rows / 2]) / 2 << endl;
  650.         int arrayOfCount[100] = {};
  651.         for (int i = 0; i < rows; ++i)
  652.             ++arrayOfCount[ARR[i]];
  653.         int maxElement = arrayOfCount[0];
  654.         for (int i = 1; i < 100; ++i) {
  655.             if (maxElement < arrayOfCount[i])
  656.                 maxElement = arrayOfCount[i];
  657.         }
  658.         int countSummary = 0;
  659.         cout << "Мода(ы) массива: ";
  660.         for (int i = 0; i < 100; ++i) {
  661.             if (arrayOfCount[i] == maxElement) {
  662.                 cout << i << " ";
  663.                 ++countSummary;
  664.             }
  665.         }
  666.         delete[] ARR;
  667.         cout << endl;
  668.         break;
  669.     }
  670.     }
  671.     system("pause");
  672. }
  673. void flagi()
  674. {
  675.     HANDLE g = GetStdHandle(STD_OUTPUT_HANDLE);
  676.     cout << "флаг России\n";
  677.     SetConsoleTextAttribute(g, 240);
  678.     cout << "                                  \n";
  679.     SetConsoleTextAttribute(g, 240);
  680.     cout << "                                  \n";
  681.     SetConsoleTextAttribute(g, 240);
  682.     cout << "                                  \n";
  683.     SetConsoleTextAttribute(g, 147);
  684.     cout << "                                  \n";
  685.     SetConsoleTextAttribute(g, 147);
  686.     cout << "                                  \n";
  687.     SetConsoleTextAttribute(g, 147);
  688.     cout << "                                  \n";
  689.     SetConsoleTextAttribute(g, 200);
  690.     cout << "                                  \n";
  691.     SetConsoleTextAttribute(g, 200);
  692.     cout << "                                  \n";
  693.     SetConsoleTextAttribute(g, 200);
  694.     cout << "                                  \n\n\n";
  695.     SetConsoleTextAttribute(g, 07);
  696.     cout << "флаг Швеции\n";
  697.     SetConsoleTextAttribute(g, 147);
  698.     cout << "         ";
  699.     SetConsoleTextAttribute(g, 230);
  700.     cout << "         ";
  701.     SetConsoleTextAttribute(g, 147);
  702.     cout << "                \n";
  703.     SetConsoleTextAttribute(g, 147);
  704.     cout << "         ";
  705.     SetConsoleTextAttribute(g, 230);
  706.     cout << "         ";
  707.     SetConsoleTextAttribute(g, 147);
  708.     cout << "                \n";
  709.     SetConsoleTextAttribute(g, 147);
  710.     cout << "         ";
  711.     SetConsoleTextAttribute(g, 230);
  712.     cout << "         ";
  713.     SetConsoleTextAttribute(g, 147);
  714.     cout << "                \n";
  715.     SetConsoleTextAttribute(g, 230);
  716.     cout << "                                  \n";
  717.     SetConsoleTextAttribute(g, 230);
  718.     cout << "                                  \n";
  719.     SetConsoleTextAttribute(g, 230);
  720.     cout << "                                  \n";
  721.     SetConsoleTextAttribute(g, 147);
  722.     cout << "         ";
  723.     SetConsoleTextAttribute(g, 230);
  724.     cout << "         ";
  725.     SetConsoleTextAttribute(g, 147);
  726.     cout << "                \n";
  727.     SetConsoleTextAttribute(g, 147);
  728.     cout << "         ";
  729.     SetConsoleTextAttribute(g, 230);
  730.     cout << "         ";
  731.     SetConsoleTextAttribute(g, 147);
  732.     cout << "                \n";
  733.     SetConsoleTextAttribute(g, 147);
  734.     cout << "         ";
  735.     SetConsoleTextAttribute(g, 230);
  736.     cout << "         ";
  737.     SetConsoleTextAttribute(g, 147);
  738.     cout << "                \n";
  739.     _getch();
  740. }
  741. int meny()
  742. {
  743.     while (true)
  744.     {
  745.         int opt = failcin();
  746.         if (opt == 1 || opt == 2 || opt == 3 || opt == 4 || opt == 5)
  747.         {
  748.             return opt;
  749.         }
  750.         else
  751.         {
  752.             cout << "попробуйте ещё раз 1 -bubble,2-shaker,3-insert,4-quick,5-comb";
  753.         }
  754.     }
  755. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement