#include<bits/stdc++.h>
using namespace std;
 
class linklist
{
    struct Node
    {
        int data;
        Node*next;
 
    Node(int data,Node*ptr)
    {
        this->data=data;
        next=ptr;
    }
    Node(int data)
    {
        this->data=data;
        next=0;
    }
    };
    Node*head=nullptr;
    Node*tail=nullptr;
void insertfirst(int val)
{
Node*nn=new Node(val,head);
head=nn;
if(tail==0)tail=nn;
}
void insertlast(int val)
{
    if(head==0)
    {
        insertfirst(val);
    }
Node*nn=new Node(val);
tail->next=nn;
tail=nn;
}
int size=0;
public:
void insert(int val,int pos)
{
    size++;
    if(pos==1){
    insertfirst(val);
    return;}
    else if(pos==size)
    {
        insertlast(val);
        return;
    }
    Node*prev=head;
    for(int i=0;i<pos-2;i++)
    {
        prev=prev->next;
    }
    Node*nn=new Node(val,prev->next);
    prev->next=nn;
}
void delvalue(int pos)
{
    if(pos < 1 || pos > size)
    {
        cout << "Invalid position!" << endl;
        return;
    }
 
    if(pos == 1) 
    {
        Node* temp = head;      
        head = head->next;     
        if(head == nullptr) 
            tail = nullptr;     
        delete temp;           
    }
    else 
    {
        Node* prev = head;
 
        for(int i = 1; i < pos - 1; i++)
        {
            prev = prev->next;
        }
 
        Node* temp = prev->next;    
        prev->next = temp->next;    
 
        if(temp == tail)           
            tail = prev;           
 
        delete temp;               
    }
    size--;
}
void display()
{
    Node*ptr=head;
    while(ptr!=0)
    {
        cout<<ptr->data<<" ";
        ptr=ptr->next;
    }
    cout<<endl;
}
};
 
int main()
{
linklist l1,l2;
l1.insert(100,1);
l1.insert(200,1);
l1.insert(300,2);
l1.display();
l1.delvalue(2);
l1.display();
    return 0;
 
}
				I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIGxpbmtsaXN0CnsKICAgIHN0cnVjdCBOb2RlCiAgICB7CiAgICAgICAgaW50IGRhdGE7CiAgICAgICAgTm9kZSpuZXh0OwoKICAgIE5vZGUoaW50IGRhdGEsTm9kZSpwdHIpCiAgICB7CiAgICAgICAgdGhpcy0+ZGF0YT1kYXRhOwogICAgICAgIG5leHQ9cHRyOwogICAgfQogICAgTm9kZShpbnQgZGF0YSkKICAgIHsKICAgICAgICB0aGlzLT5kYXRhPWRhdGE7CiAgICAgICAgbmV4dD0wOwogICAgfQogICAgfTsKICAgIE5vZGUqaGVhZD1udWxscHRyOwogICAgTm9kZSp0YWlsPW51bGxwdHI7CnZvaWQgaW5zZXJ0Zmlyc3QoaW50IHZhbCkKewpOb2RlKm5uPW5ldyBOb2RlKHZhbCxoZWFkKTsKaGVhZD1ubjsKaWYodGFpbD09MCl0YWlsPW5uOwp9CnZvaWQgaW5zZXJ0bGFzdChpbnQgdmFsKQp7CiAgICBpZihoZWFkPT0wKQogICAgewogICAgICAgIGluc2VydGZpcnN0KHZhbCk7CiAgICB9Ck5vZGUqbm49bmV3IE5vZGUodmFsKTsKdGFpbC0+bmV4dD1ubjsKdGFpbD1ubjsKfQppbnQgc2l6ZT0wOwpwdWJsaWM6CnZvaWQgaW5zZXJ0KGludCB2YWwsaW50IHBvcykKewogICAgc2l6ZSsrOwogICAgaWYocG9zPT0xKXsKICAgIGluc2VydGZpcnN0KHZhbCk7CiAgICByZXR1cm47fQogICAgZWxzZSBpZihwb3M9PXNpemUpCiAgICB7CiAgICAgICAgaW5zZXJ0bGFzdCh2YWwpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIE5vZGUqcHJldj1oZWFkOwogICAgZm9yKGludCBpPTA7aTxwb3MtMjtpKyspCiAgICB7CiAgICAgICAgcHJldj1wcmV2LT5uZXh0OwogICAgfQogICAgTm9kZSpubj1uZXcgTm9kZSh2YWwscHJldi0+bmV4dCk7CiAgICBwcmV2LT5uZXh0PW5uOwp9CnZvaWQgZGVsdmFsdWUoaW50IHBvcykKewogICAgaWYocG9zIDwgMSB8fCBwb3MgPiBzaXplKQogICAgewogICAgICAgIGNvdXQgPDwgIkludmFsaWQgcG9zaXRpb24hIiA8PCBlbmRsOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaWYocG9zID09IDEpIAogICAgewogICAgICAgIE5vZGUqIHRlbXAgPSBoZWFkOyAgICAgIAogICAgICAgIGhlYWQgPSBoZWFkLT5uZXh0OyAgICAgCiAgICAgICAgaWYoaGVhZCA9PSBudWxscHRyKSAKICAgICAgICAgICAgdGFpbCA9IG51bGxwdHI7ICAgICAKICAgICAgICBkZWxldGUgdGVtcDsgICAgICAgICAgIAogICAgfQogICAgZWxzZSAKICAgIHsKICAgICAgICBOb2RlKiBwcmV2ID0gaGVhZDsKICAgICAgIAogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPCBwb3MgLSAxOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBwcmV2ID0gcHJldi0+bmV4dDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgTm9kZSogdGVtcCA9IHByZXYtPm5leHQ7ICAgIAogICAgICAgIHByZXYtPm5leHQgPSB0ZW1wLT5uZXh0OyAgICAKICAgICAgICAKICAgICAgICBpZih0ZW1wID09IHRhaWwpICAgICAgICAgICAKICAgICAgICAgICAgdGFpbCA9IHByZXY7ICAgICAgICAgICAKICAgICAgICAKICAgICAgICBkZWxldGUgdGVtcDsgICAgICAgICAgICAgICAKICAgIH0KICAgIHNpemUtLTsKfQp2b2lkIGRpc3BsYXkoKQp7CiAgICBOb2RlKnB0cj1oZWFkOwogICAgd2hpbGUocHRyIT0wKQogICAgewogICAgICAgIGNvdXQ8PHB0ci0+ZGF0YTw8IiAiOwogICAgICAgIHB0cj1wdHItPm5leHQ7CiAgICB9CiAgICBjb3V0PDxlbmRsOwp9Cn07CgppbnQgbWFpbigpCnsKbGlua2xpc3QgbDEsbDI7CmwxLmluc2VydCgxMDAsMSk7CmwxLmluc2VydCgyMDAsMSk7CmwxLmluc2VydCgzMDAsMik7CmwxLmRpc3BsYXkoKTsKbDEuZGVsdmFsdWUoMik7CmwxLmRpc3BsYXkoKTsKICAgIHJldHVybiAwOwoKfQ==