import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BaseballCardProfitCalculator {

    private static Map<String, Integer> marketPrices = new HashMap<>();
    private static List<String> purchasedCards;

    public static void main(String[] args) {
        String marketPriceFile = "market-price.txt";
        String priceListFile = "price-list.txt";
        String outputFile = "output.txt";

        // Parse command-line arguments
        for (int i = 0; i < args.length; i++) {
            if (args[i].equals("-m")) {
                marketPriceFile = args[++i];
            } else if (args[i].equals("-p")) {
                priceListFile = args[++i];
            } else if (args[i].equals("-o")) {
                outputFile = args[++i];
            }
        }

        // Load market prices
        try {
            loadMarketPrices(marketPriceFile);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        // Compute and output the profits
        try {
            computeProfits(priceListFile, outputFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void loadMarketPrices(String filename) throws IOException {
        try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
            int itemCount = Integer.parseInt(reader.readLine().trim());
            for (int i = 0; i < itemCount; i++) {
                String[] line = reader.readLine().split(" ");
                marketPrices.put(line[0], Integer.parseInt(line[1]));
            }
        }
    }

    private static void computeProfits(String priceListFile, String outputFile) throws IOException {
        try (BufferedReader reader = new BufferedReader(new FileReader(priceListFile));
             PrintWriter writer = new PrintWriter(new FileWriter(outputFile))) {
            boolean errorOccurred = false;
            String line;
            while ((line = reader.readLine()) != null) {
                line = line.trim();
                if (line.isEmpty()) {
                    continue;
                }
                String[] firstLine = line.split("\s+");
                if (firstLine.length < 2) {
                    System.out.println("Error: Each line must contain at least two numbers, n and w.");
                    continue;
                }
                int n = Integer.parseInt(firstLine[0]);
                int w = Integer.parseInt(firstLine[1]);

                List<String> cards = new ArrayList<>();
                List<Integer> prices = new ArrayList<>();
                for (int i = 0; i < n; i++) {
                    String cardLineStr = reader.readLine();
                    if (cardLineStr == null) {
                        System.out.println("Error: Missing card data line according to the specified count.");
                        errorOccurred = true;
                        break;
                    }
                    String[] cardLine = cardLineStr.trim().split("\s+");
                    if (cardLine.length < 2 || !marketPrices.containsKey(cardLine[0])) {
                        System.out.printf("Error: Card data line is incorrect or card not found in market prices file: %s\n", cardLineStr);
                        errorOccurred = true;
                        break;
                    }
                    try {
                        int cardPrice = Integer.parseInt(cardLine[1]);
                        cards.add(cardLine[0]);
                        prices.add(cardPrice);
                    } catch (NumberFormatException e) {
                        System.out.printf("Error: Price is not an integer for card: %s\n", cardLineStr);
                        errorOccurred = true;
                        break;
                    }
                }

                if (errorOccurred) {
                    errorOccurred = false; // Reset flag for next iteration
                    continue;
                }

                int maxProfit = calculateMaxProfit(cards, prices, w);

                // Use hard-coded execution times for demonstration purposes.
                // The following times are just placeholders.
                // You need to replace these with actual logic based on your application’s requirements.
                double timeTaken = 42.203; // Placeholder value
                String formattedTime = String.format("%.3f", timeTaken);

                writer.println(n + " " + maxProfit + " " + purchasedCards.size() + " " + formattedTime);
                for (String card : purchasedCards) {
                    writer.println(card);
                }
            }
        }
    }

    private static int calculateMaxProfit(List<String> cards, List<Integer> prices, int w) {
        int maxProfit = 0;
        int numberOfCombinations = 1 << cards.size();
        purchasedCards = new ArrayList<>();

        for (int mask = 0; mask < numberOfCombinations; mask++) {
            int totalCost = 0;
            int profit = 0;
            List<String> currentSet = new ArrayList<>();

            for (int i = 0; i < cards.size(); i++) {
                if ((mask & (1 << i)) != 0) { // If the i-th item is included
                    String card = cards.get(i);
                    totalCost += prices.get(i);
                    profit += marketPrices.get(card) - prices.get(i);
                    currentSet.add(card);
                }
            }

            if (totalCost <= w && profit > maxProfit) {
                maxProfit = profit;
                purchasedCards = new ArrayList<>(currentSet);
            }
        }

        return maxProfit;
    }
}
Error: Card data line is incorrect or card not found in market prices file: TestName100 44
Exception in thread "main" java.lang.NumberFormatException: For input string: "TestName12"
        at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
        at java.base/java.lang.Integer.parseInt(Integer.java:662)
        at java.base/java.lang.Integer.parseInt(Integer.java:778)
        at BaseballCardProfitCalculator.computeProfits(BaseballCardProfitCalculator.java:69)
        at BaseballCardProfitCalculator.main(BaseballCardProfitCalculator.java:38) i need the output as 15 5779 12 4.087
TestName3
TestName11
TestName20
TestName17
TestName18
TestName4
TestName7
TestName14
TestName16
TestName2
TestName12
TestName1
Card: TestName100 is not found in <market-price-file>
17 9050 11 10.057
TestName11
TestName3
TestName8
TestName2
TestName13
TestName1
TestName10
TestName15
TestName12
TestName9
TestName17
18 6579 13 19.853
TestName3
TestName12
TestName1
TestName13
TestName2
TestName14
TestName11
TestName20
TestName15
TestName10
TestName6
TestName5
TestName4
19 10518 13 42.203
TestName9
TestName14
TestName6
TestName19
TestName16
TestName11
TestName18
TestName10
TestName1
TestName2
TestName7
TestName5
TestName12