#!/local/bin/python
# status field definitions
#	value	definition
#	0	header (no data)
#	1	data, but not the current cell
#	2	data and current cell
current=0
hd=0
class slist:
	def __init__(self,nxt=0,value=0):
		global current,hd
		self.nxt=nxt
		self.val=value
		if nxt==0 and value==0: hd=self
		current=self
	def add(self,value):
		global current,hd
		if self.nxt == 0 or value < self.nxt.val :
			current=self.nxt=slist(self.nxt,value)
		else: self.nxt.add(value)
	def delete(self,value):
		global current,hd
		if self.nxt == 0: return
		if self.nxt.val == value:
			current=self.nxt=self.nxt.nxt
		else: self.nxt.delete(value)
	def myprint(self):
		global current,hd
		c=0
		if self == current: c=1
		if self != hd: print "(",self.val,":",c,")"
		if self.nxt != 0: self.nxt.myprint()
	def member(self,value):
		if self.nxt == 0: return 0
		if self.nxt.val == value: return 1
		return self.nxt.member(value)
	def length(self):
		if self.nxt == 0: return 0
		return self.nxt.length() + 1
	def search(self,value):
		if self.nxt == 0: return
		if self.nxt.val == value: return self.nxt
		self.nxt.search(value)
	def curr(self):
		global current,hd
		if current==0 : return
		return current.val
	def next(self):
		global current,hd
		if current.nxt != 0:
			t=current.nxt.val
			current=current.nxt
			return t
		return
	def prev(self):
		global current,hd
		if self.nxt == 0: return
		if self.nxt == current:
			current=self
			return self.val
		return self.nxt.prev()
	def index(self,n=1):
		global current,hd
		if n==0 and self==hd:n=1
		if n==0 :
			current=self
			return self.val
		if self.nxt ==0: return
		return self.nxt.index(n-1)
def main():
	l=slist()
	l.add(3)
	l.add(1)
	l.add(2)
	l.myprint()
	print l.curr()
	print "index(1)=",l.index(1)
	print "next()=",l.next()
	print "next()=",l.next()
	print "next()=",l.next()
	print "next()=",l.next()
	print "prev()=",l.prev()
	print "prev()=",l.prev()
	print "prev()=",l.prev()
	print "prev()=",l.prev()
	print "prev()=",l.prev()
if __name__ == '__main__': main()
