import java.util.LinkedList;
import java.util.Queue;

public class Bulles {

    // Méthode bulle : effectue un parcours
    public static boolean bulle(Queue<Integer> source, Queue<Integer> destination) {
        boolean changed = false;
        if (source.isEmpty()) {
            return false;
        }

        int prev = source.poll(); // On récupère le premier élément
        while (!source.isEmpty()) {
            int current = source.poll();
            if (prev > current) { // Si les deux éléments ne sont pas dans l'ordre
                changed = true;
                destination.add(current); // Ajouter le plus petit élément
                prev = prev; // Garder prev pour continuer la comparaison
            } else {
                destination.add(prev);
                prev = current;
            }
        }
        destination.add(prev); // Ajouter le dernier élément
        return changed;
    }

    // Méthode tri : utilise bulle pour trier complètement la file
    public static void tri(Queue<Integer> file) {
        Queue<Integer> intermediaire = new LinkedList<>();
        boolean changed;
        do {
            changed = bulle(file, intermediaire);
            // Inverser les files pour un nouveau parcours
            Queue<Integer> temp = file;
            file = intermediaire;
            intermediaire = temp;
        } while (changed);

        // Les valeurs triées se trouvent dans `file`
        while (!file.isEmpty()) {
            System.out.print(file.poll() + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        // Exemple : lecture des entiers passés en arguments
        Queue<Integer> file = new LinkedList<>();
        for (String arg : args) {
            file.add(Integer.parseInt(arg));
        }

        // Tri et affichage du résultat
        tri(file);
    }
}
