#include <iostream>
#include <string>
using namespace std;

class node
{
    string name;
    node*next;
    public:
    friend class sll;

};
class sll:public node
{
    public:
    node*head;
    node*last;
    int*k;
    friend class node;
    sll()
    {
        head=nullptr;
        last=nullptr;
    }
    ~sll()
    {
        node*temp2;
        node*temp;
        temp = head;
        while(temp!=nullptr)
        {
            temp2 = temp->next;
            delete(temp);
            temp = temp2;
        }
    }
    void diag() {
        node*temp = head;
        cout << "Head:"<<head<<endl;
        cout << "Last:"<<last<<endl;
        while(temp!=nullptr)
        {
        	cout << "  Name:  " <<temp->name <<endl; 
        	cout << "  next:  " <<temp->next <<endl; 
            temp = temp->next;
        }
    }
    void input()
    {

        node*temp;
        temp = new node;
        cout<<"Enter Name"<<endl;
        cin>>temp->name;
        if(head==nullptr)
        {
            head = temp;
            last = temp;
        }
        else 
        {
            last->next = temp;
            last = temp;
        }

    }
    sll& operator=(const sll& o)
    {
        node*temp;
        temp = o.head;
        while(temp!=nullptr)
        {
        	node *clone = new node(*temp); 
        	if(head==nullptr)
        {
            head = clone;
            last = clone;
        }
        else 
        {
            last->next = clone;
            last = clone;
        }

            temp = temp->next;
        }
        return *this; 
    }
   void output()
    {
        cout<<"Output:"<<endl;
        node*temp;
        temp = head;
        while(temp!=nullptr)
        {
            cout<<temp->name<<" ";
            temp = temp->next;
        }
        cout <<endl; 
    }
    sll &get()
    {
        return *this;
    }
};
int main()
{
    sll obj,obj1;
    obj.diag();
    obj.input();
    obj.input(); 
    obj.diag();
    obj1 = obj.get();
    obj1.output();
    obj1.diag(); 
    return 0;
}