private Conversion bestConversion(Conversion... cons) {
    Item made = cons[0].out ;
    Conversion picked = null ;
    float minPrice = Float.POSITIVE_INFINITY ;
    for (Conversion c : cons) {
      if (c.out.type != made.type) I.complain("Only for same good!") ;
      float unitPrice = 0 ;
      for (Item raw : c.raw) {
        final float amount = amountOf(raw.type) ;
        ///if (amount == 0) continue consLoop ;
        float rawPrice = priceFor(raw.type) * raw.amount ;
        //I.say("Raw price for "+raw+" is "+rawPrice) ;
        rawPrice *= 5 / (5 + amount) ;
        rawPrice *= 1 + shortagePenalty(raw.type) ;
        unitPrice += rawPrice ;
      }
      unitPrice /= c.out.amount ;
      //I.say("Unit price for "+c+" is "+unitPrice) ;
      if (unitPrice < minPrice) { minPrice = unitPrice ; picked = c ; }
    }
    return picked ;
  }