class Alt<Token,Result> implements Parser<Token,Result>{
 
    Parser<Token,Result> p1;
    Parser<Token,Result> p2;
    Alt(Parser<Token,Result> p1,Parser<Token,Result> p2){
	this.p1=p1;this.p2=p2;
    }

    public Pair<Result,Li<Token>> parse(Li<Token> xs){
	Pair<Result,Li<Token>> r1= p1.parse(xs);
	if (r1!=null) return r1;
	return p2.parse(xs);
    }
  public static void main(String [] args){
      Parser<Character,Character> p1
        = new Atom<Character>('{');
      Parser<Character,Character> p2
        = new Atom<Character>('}');
   Parser<Character,Character> p12
     = new Alt<Character,Character>(p1,p2);
   Li<Character> xs
    =new Li<Character>('}'
    ,new Li<Character>('a'
    ,new Li<Character>('ü'
    ,new Li<Character>())));
   System.out.println(p12.parse(xs));
  }
}
