#include <iostream>
using namespace std;
 
struct node
{
    int data;
    node *next = nullptr;
};
 
node *list = nullptr;
 
void insertFront()
{
    int value;
 
    //cout << "ENTER A VALUE=";
    cin >> value;
 
    list = new node{value, list};
}
 
void display()
{
    for(node *p = list; p != nullptr; p = p->next)
    {
        cout << p->data << " ";
    }
    cout << endl;
}
 
void insertSpec()
{
    int number, value;
 
    //cout << "Enter the node number after which you want to enter a new node=";
    cin >> number;
 
    if (number < 1)
    {
        cout << "INVALID NODE NUMBER!" << endl;
        return;
    }
 
    node **p = &list;
    int n = number;
 
    while (*p != nullptr && n > 0)
    {
        p = &((*p)->next);
        --n;
    }
 
    if (n > 0)
    {
        cout << "YOU CANNOT PUT A NODE AFTER " << number << endl;
        return;
    }
 
    //cout << "ENTER THE VALUE YOU WANT TO ADD=";
    cin >> value;
 
    *p = new node{value, *p};
}
 
int main()
{
    int choice;
 
    /*
    cout << "1) Insert at front" << endl;
    cout << "5) Insert at specified place" << endl;
    cout << "9) Display" << endl;
    cout << "99) Exit" << endl << endl;
	*/
 
    do
    {
        //cout << "Your choice:";
        cin >> choice;
 
        switch (choice)
        {
        case 1:
            insertFront();
            break;
 
        case 5:
            insertSpec();
            break;
 
        case 9:
            display();
            break;
		}
	}
    while (choice != 99);
 
    cout << "PROGRAM TERMINATED :)";
 
    return 0;
}
				I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZGUKewogICAgaW50IGRhdGE7CiAgICBub2RlICpuZXh0ID0gbnVsbHB0cjsKfTsKCm5vZGUgKmxpc3QgPSBudWxscHRyOwoKdm9pZCBpbnNlcnRGcm9udCgpCnsKICAgIGludCB2YWx1ZTsKCiAgICAvL2NvdXQgPDwgIkVOVEVSIEEgVkFMVUU9IjsKICAgIGNpbiA+PiB2YWx1ZTsKCiAgICBsaXN0ID0gbmV3IG5vZGV7dmFsdWUsIGxpc3R9Owp9Cgp2b2lkIGRpc3BsYXkoKQp7CiAgICBmb3Iobm9kZSAqcCA9IGxpc3Q7IHAgIT0gbnVsbHB0cjsgcCA9IHAtPm5leHQpCiAgICB7CiAgICAgICAgY291dCA8PCBwLT5kYXRhIDw8ICIgIjsKICAgIH0KICAgIGNvdXQgPDwgZW5kbDsKfQoKdm9pZCBpbnNlcnRTcGVjKCkKewogICAgaW50IG51bWJlciwgdmFsdWU7CgogICAgLy9jb3V0IDw8ICJFbnRlciB0aGUgbm9kZSBudW1iZXIgYWZ0ZXIgd2hpY2ggeW91IHdhbnQgdG8gZW50ZXIgYSBuZXcgbm9kZT0iOwogICAgY2luID4+IG51bWJlcjsKCiAgICBpZiAobnVtYmVyIDwgMSkKICAgIHsKICAgICAgICBjb3V0IDw8ICJJTlZBTElEIE5PREUgTlVNQkVSISIgPDwgZW5kbDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbm9kZSAqKnAgPSAmbGlzdDsKICAgIGludCBuID0gbnVtYmVyOwoKICAgIHdoaWxlICgqcCAhPSBudWxscHRyICYmIG4gPiAwKQogICAgewogICAgICAgIHAgPSAmKCgqcCktPm5leHQpOwogICAgICAgIC0tbjsKICAgIH0KCiAgICBpZiAobiA+IDApCiAgICB7CiAgICAgICAgY291dCA8PCAiWU9VIENBTk5PVCBQVVQgQSBOT0RFIEFGVEVSICIgPDwgbnVtYmVyIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vY291dCA8PCAiRU5URVIgVEhFIFZBTFVFIFlPVSBXQU5UIFRPIEFERD0iOwogICAgY2luID4+IHZhbHVlOwoKICAgICpwID0gbmV3IG5vZGV7dmFsdWUsICpwfTsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgY2hvaWNlOwoKICAgIC8qCiAgICBjb3V0IDw8ICIxKSBJbnNlcnQgYXQgZnJvbnQiIDw8IGVuZGw7CiAgICBjb3V0IDw8ICI1KSBJbnNlcnQgYXQgc3BlY2lmaWVkIHBsYWNlIiA8PCBlbmRsOwogICAgY291dCA8PCAiOSkgRGlzcGxheSIgPDwgZW5kbDsKICAgIGNvdXQgPDwgIjk5KSBFeGl0IiA8PCBlbmRsIDw8IGVuZGw7CgkqLwoKICAgIGRvCiAgICB7CiAgICAgICAgLy9jb3V0IDw8ICJZb3VyIGNob2ljZToiOwogICAgICAgIGNpbiA+PiBjaG9pY2U7CgogICAgICAgIHN3aXRjaCAoY2hvaWNlKQogICAgICAgIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGluc2VydEZyb250KCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgIGluc2VydFNwZWMoKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgOToKICAgICAgICAgICAgZGlzcGxheSgpOwogICAgICAgICAgICBicmVhazsKCQl9Cgl9CiAgICB3aGlsZSAoY2hvaWNlICE9IDk5KTsKCiAgICBjb3V0IDw8ICJQUk9HUkFNIFRFUk1JTkFURUQgOikiOwoKICAgIHJldHVybiAwOwp9