import static java.util.Arrays.deepToString;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.Queue;

class SecretSanta {
    public String[][] go(String[] s) {
        List<String> partnerPool = new LinkedList<String>(Arrays.asList(s));
        Collections.shuffle(partnerPool);
        String[][] secretSantaList = new String[partnerPool.size()][2];
        for (int i=0; i<s.length; i++) {
            String partner = partnerPool.remove(0);
            if (s[i].equals(partner)) {
                partnerPool.add(partner);
                partner = partnerPool.remove(0);
            }
            secretSantaList[i][0] = s[i];
            secretSantaList[i][1] = partner;
        }
        return secretSantaList;
    }

    public static void main(String... args) {
        String[] players = new String[] {"Fred", "Wilma", "Barney", "Pebbles", "Bam Bam"};
        String[][] santas = new SecretSanta().go(players);
        System.out.println(deepToString(santas));
    }
}