import java.util.*;
import java.lang.*;
import java.io.*;
class list<T>
{
node head;
node tail;
public int size;
class node
{
T data;
node next;
node(T d)
{
data=d;
next=null;
}
}
list()
{
head=null;
tail=null;
size=0;
}
public void add_head(T d)
{
node newnode=new node(d);
if(head==null)
{
head=newnode;
tail=newnode;
}
else
{
newnode.next=head;
head=newnode;
}
size++;
}
public void add_tail(T d)
{
node newnode=new node(d);
if(head==null)
{
head=newnode;
tail=newnode;
}
else
{
tail.next=newnode;
tail=newnode;
}
size++;
}
public void add(int p,T d)
{
if(p<0 || p>size)
{
System.
out.
println("wrong position"); return;
}
if (head==null || p==0)
add_head(d);
else if(p==size)
add_tail(d);
else
{
node newnode=new node(d);
node pred=head;
node succ=head;
while(p>0)
{
pred=succ;
succ=succ.next;
p--;
}
pred.next=newnode;
newnode.next=succ;
size++;
}
}
void del_head()
{
node t;
if (head==null)
{
System.
out.
println("list is empty"); return;
}
if(tail==head)
{
head=tail=null;
size=0;
}
else
{
t=head;
head=head.next;
t.next=null;
t=null;
size--;
}
}
void del_tail()
{
node t;
if (head==null)
{
System.
out.
println("list is empty"); return;
}
if(tail==head)
{
head=tail=null;
size=0;
}
else
{
node pred,succ;
pred=succ=head;
while(succ.next!=null)
{
pred=succ;
succ=succ.next;
}
pred.next=null;
tail=pred;
succ=null;
size--;
}
}
public void del(int p)
{
if(p<0 || p>size-1)
{
System.
out.
println("wrong position"); return;
}
if (head==null)
{
System.
out.
println("list is empty"); return;
}
else if (p==0)
del_head();
else if(p==size-1)
del_tail();
else
{
node pred=head;
node succ=head;
while(p>0)
{
pred=succ;
succ=succ.next;
p--;
}
pred.next=succ.next;
succ.next=null;
succ=null;
size--;
}
}
void print()
{
node n=head;
while(n!=null)
{
n=n.next;
}
}
int getSize()
{
return size;
}
{
try
{
node n=head;
node m=head;
while(n!=null)
{
if( (int) n.data> (int ) m.data) m=n;
n=n.next;
}
return Integer.
toString((int ) m.
data); } catch(Exception e
){return "list is empty";} }
boolean search(T d)
{
try
{
node n=head;
while(n!=null)
{
if(n.data==d) return true;
n=n.next;
}
return false;
}
}
class Ideone
{
public static void main
(String argv
[]) {
list<Integer> l=new list<Integer>();
l.add_head(1);
l.add_head(2);
l.add_tail(3);
l.add_tail(4);
l.add(2,5);
l.print();
System.
out.
println(l.
search(6)); l.del_head();
l.print();
l.del_tail();
l.print();
l.del(2);
l.print();
System.
out.
println(l.
getSize()); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmNsYXNzIGxpc3Q8VD4Kewpub2RlIGhlYWQ7Cm5vZGUgdGFpbDsKcHVibGljIGludCBzaXplOwpjbGFzcyBub2RlCnsKCVQgZGF0YTsKCW5vZGUgbmV4dDsKCSBub2RlKFQgZCkKCXsKCQlkYXRhPWQ7CgkJbmV4dD1udWxsOwoJfQp9CgogbGlzdCgpCnsKCWhlYWQ9bnVsbDsKCXRhaWw9bnVsbDsKCXNpemU9MDsKfQoKcHVibGljIHZvaWQgYWRkX2hlYWQoVCBkKQp7Cglub2RlIG5ld25vZGU9bmV3IG5vZGUoZCk7CglpZihoZWFkPT1udWxsKQoJewoJCWhlYWQ9bmV3bm9kZTsKCQl0YWlsPW5ld25vZGU7Cgl9CgllbHNlCgl7CgkJbmV3bm9kZS5uZXh0PWhlYWQ7CgkJaGVhZD1uZXdub2RlOwoJfQpzaXplKys7Cn0KCnB1YmxpYyB2b2lkIGFkZF90YWlsKFQgZCkKewoJbm9kZSBuZXdub2RlPW5ldyBub2RlKGQpOwoJaWYoaGVhZD09bnVsbCkKCXsKCQloZWFkPW5ld25vZGU7CgkJdGFpbD1uZXdub2RlOwoJfQoJZWxzZQoJewoJCXRhaWwubmV4dD1uZXdub2RlOwoJCXRhaWw9bmV3bm9kZTsKCX0Kc2l6ZSsrOwp9CgoKcHVibGljIHZvaWQgYWRkKGludCBwLFQgZCkKewoJCglpZihwPDAgfHwgcD5zaXplKSAKCXsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIndyb25nIHBvc2l0aW9uIik7CgkJcmV0dXJuOwoJfQoJaWYgKGhlYWQ9PW51bGwgfHwgcD09MCkKCSAgICBhZGRfaGVhZChkKTsKCWVsc2UgaWYocD09c2l6ZSkKCQlhZGRfdGFpbChkKTsKCWVsc2UKCXsKCQlub2RlIG5ld25vZGU9bmV3IG5vZGUoZCk7CgkJbm9kZSBwcmVkPWhlYWQ7CgkJbm9kZSBzdWNjPWhlYWQ7CgkJd2hpbGUocD4wKQoJCXsKCQkJcHJlZD1zdWNjOwoJCQlzdWNjPXN1Y2MubmV4dDsKCQkJcC0tOwoJCX0KCQlwcmVkLm5leHQ9bmV3bm9kZTsKCQluZXdub2RlLm5leHQ9c3VjYzsKCQlzaXplKys7Cgl9Cn0gCgp2b2lkIGRlbF9oZWFkKCkKewoJbm9kZSB0OwoJaWYgKGhlYWQ9PW51bGwpCgl7CgkJU3lzdGVtLm91dC5wcmludGxuKCJsaXN0IGlzIGVtcHR5Iik7CgkJcmV0dXJuOwoJfQoJaWYodGFpbD09aGVhZCkKCXsKCQloZWFkPXRhaWw9bnVsbDsKCQlzaXplPTA7Cgl9CgllbHNlCgl7Cgl0PWhlYWQ7CgloZWFkPWhlYWQubmV4dDsKCXQubmV4dD1udWxsOwoJdD1udWxsOwoJc2l6ZS0tOwogICAgfQp9CnZvaWQgZGVsX3RhaWwoKQp7Cglub2RlIHQ7CglpZiAoaGVhZD09bnVsbCkKCXsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImxpc3QgaXMgZW1wdHkiKTsKCQlyZXR1cm47Cgl9CglpZih0YWlsPT1oZWFkKQoJewoJCWhlYWQ9dGFpbD1udWxsOwoJCXNpemU9MDsKCX0KCWVsc2UKCQl7CgkJbm9kZSBwcmVkLHN1Y2M7CgkJcHJlZD1zdWNjPWhlYWQ7CgkJd2hpbGUoc3VjYy5uZXh0IT1udWxsKQoJCXsKCQkJcHJlZD1zdWNjOwoJCQlzdWNjPXN1Y2MubmV4dDsKCQl9CgkJcHJlZC5uZXh0PW51bGw7CgkJdGFpbD1wcmVkOwoJCXN1Y2M9bnVsbDsKCQlzaXplLS07CgkJCgl9Cn0KcHVibGljIHZvaWQgZGVsKGludCBwKQp7CgkKCWlmKHA8MCB8fCBwPnNpemUtMSkgCgl7CgkJU3lzdGVtLm91dC5wcmludGxuKCJ3cm9uZyBwb3NpdGlvbiIpOwoJCXJldHVybjsKCX0KCWlmIChoZWFkPT1udWxsKQoJewoJCVN5c3RlbS5vdXQucHJpbnRsbigibGlzdCBpcyBlbXB0eSIpOwoJCXJldHVybjsKCX0KCWVsc2UgaWYgKHA9PTApCgkgICAgZGVsX2hlYWQoKTsKCWVsc2UgaWYocD09c2l6ZS0xKQoJCWRlbF90YWlsKCk7CgllbHNlCgl7CgkJbm9kZSBwcmVkPWhlYWQ7CgkJbm9kZSBzdWNjPWhlYWQ7CgkJd2hpbGUocD4wKQoJCXsKCQkJcHJlZD1zdWNjOwoJCQlzdWNjPXN1Y2MubmV4dDsKCQkJcC0tOwoJCX0KCQlwcmVkLm5leHQ9c3VjYy5uZXh0OwoJCXN1Y2MubmV4dD1udWxsOwoJCXN1Y2M9bnVsbDsKCQlzaXplLS07Cgl9Cn0gCnZvaWQgcHJpbnQoKQp7Cglub2RlIG49aGVhZDsKCXdoaWxlKG4hPW51bGwpCgl7CgkJU3lzdGVtLm91dC5wcmludChuLmRhdGErIiAiKTsKCQluPW4ubmV4dDsKCX0KU3lzdGVtLm91dC5wcmludGxuKCk7Cn0KaW50IGdldFNpemUoKQp7CglyZXR1cm4gc2l6ZTsKfQoKU3RyaW5nIG1heCgpCnsKCXRyeQoJewoJbm9kZSBuPWhlYWQ7Cglub2RlIG09aGVhZDsKCXdoaWxlKG4hPW51bGwpCgl7CgkJaWYoIChpbnQpIG4uZGF0YT4gKGludCApIG0uZGF0YSkgbT1uOwoJCW49bi5uZXh0OwoJfQogICAgcmV0dXJuICBJbnRlZ2VyLnRvU3RyaW5nKChpbnQgKSBtLmRhdGEpOwogICAgfSBjYXRjaChFeGNlcHRpb24gZSl7cmV0dXJuICJsaXN0IGlzIGVtcHR5Ijt9Cn0KYm9vbGVhbiBzZWFyY2goVCBkKQp7Cgl0cnkKCXsKCQlub2RlIG49aGVhZDsKCQl3aGlsZShuIT1udWxsKQoJCXsKCQkJaWYobi5kYXRhPT1kKSByZXR1cm4gdHJ1ZTsKCQkJbj1uLm5leHQ7CgkJfQoJcmV0dXJuIGZhbHNlOwoJfWNhdGNoKEV4Y2VwdGlvbiBlKXtyZXR1cm4gZmFsc2U7fQp9Cn0KCmNsYXNzIElkZW9uZQp7CnB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmd2W10pCnsKCWxpc3Q8SW50ZWdlcj4gbD1uZXcgbGlzdDxJbnRlZ2VyPigpOwoJbC5hZGRfaGVhZCgxKTsKCWwuYWRkX2hlYWQoMik7CglsLmFkZF90YWlsKDMpOwoJbC5hZGRfdGFpbCg0KTsKCWwuYWRkKDIsNSk7CglsLnByaW50KCk7CglTeXN0ZW0ub3V0LnByaW50bG4obC5zZWFyY2goNikpOwoJU3lzdGVtLm91dC5wcmludGxuKGwubWF4KCkpOwoJbC5kZWxfaGVhZCgpOwoJbC5wcmludCgpOwoJbC5kZWxfdGFpbCgpOwoJbC5wcmludCgpOwoJbC5kZWwoMik7CglsLnByaW50KCk7CglTeXN0ZW0ub3V0LnByaW50bG4obC5nZXRTaXplKCkpOwp9Cn0K