class List {
  int val ;  List next ;

  List (int val, List next) {
    this.val = val ; this.next = next ;
  }

  static List concat(List p, List q) {
    if (p == null)
      return q ;
    else
      return new List (p.val, concat(p.next, q)) ;
  }

  static List reverse(List p) {
    List r = null ;
    for ( ; p != null ; p = p.next )
      r = new List (p.val, r) ;
    return r ;
  }

  public String toString() {
    StringBuffer b = new StringBuffer () ;

    for (List p = this ; p != null ; p = p.next)
      b.append(" " + p.val) ;
    return b.toString() ;
  }
}

