anchor.diff:  map_depth({map, _, _, _, D}) -> D;
   map_depth(emptymap) -> 0.
   
  -map_data(emptymap) -> [];
  -map_data({map, KV, L, R, _}) -> map_data(L) ++ [KV] ++ map_data(R).
  +map_enumerator(emptymap) -> noitem;
  +map_enumerator(M) -> make_enumerator(M, noitem).
  +
  +make_enumerator({map, KV, emptymap, R, _}, P) ->
  +    {enumerator, center, KV, R, P};
  +make_enumerator({map, KV, L, R, _}, P) ->
  +    make_enumerator(L, {enumerator, left, KV, R, P}).
  +    
  +enumerator_next(noitem) -> noitem;
  +enumerator_next({enumerator, center, _, emptymap, P}) -> enumerator_next(P);
  +enumerator_next({enumerator, center, KV, R, P}) -> make_enumerator(R, {enumerator, right, KV, R, P});
  +enumerator_next({enumerator, right, _, _, P}) -> enumerator_next(P);
  +enumerator_next({enumerator, left, KV, R, P}) -> {enumerator, center, KV, R, P}.
  +
  +enumerator_get(noitem) -> nothing;
  +enumerator_get({enumerator, _, KV, _, _}) -> KV.
  
positive.code: % キーはリスト(文字列)限定
  % 値は何でもOK
  % 機能は空マップ生成、キーによる値の配置と参照、
  % および全データの取得のみ
  %  空マップ生成 map_new()
  %  配置         map_put( key, value, map )
  %  参照         map_get( key, map )
  %  全データ取得 map_data( map )
  
  comp([],[]) -> eq;
  comp(_,[]) -> gt;
  
negative.code: 
  solve(W) ->
      M = mapping(W),
      palindrome(M, map_enumerator(M)).
  
  palindrome(M, W) -> palindrome(M, W, "", "", "").
  
  palindrome(_, noitem, L, C, R) -> concat(L, concat(C, R));
  palindrome(M, E, L, C, R) ->
      {H, V} = enumerator_get(E),
      T = enumerator_next(E),
      HR = reverse(H),
      case comp(H, HR) of
          gt -> palindrome(M, T, L, C, R);
  