class List {

  // container for the list's elements
  var a: array<int>;
  // size of the list
  var size: nat;

  constructor init(len:int)   
  {
    a := new int[len];
    size := 0;
  }

  method snoc(e: int) 
  {
    a[size] := e;    
    size := size + 1;    
  }

  method cons(val:int)
  {      
    var i:int := size;
    while (i > 0) 
    {       
       a[i] := a[i-1];       
       i := i - 1 ;
    }
    a[0] := val;
    size := size + 1;
  }

  method tail()    
  { 
    var i:int := 0;
    while (i < size-1) 
    {       
       a[i] := a[i + 1];       
       i := i + 1;
    }
    size := size - 1;
  }
  
  method head() returns (h:int) 
  {
    h := a[0] ;
  }
}