die "No match possible" if @people % 2 or @people == 2 and %so_s; %reverse_so_s = reverse %so_s; @keys = keys %so_s; @values = values %so_s; @singles = grep { ! ( exists $so_s{$_} or exists $reverse_so_s{$_} ) } @people; %matches = ( @keys, @singles, @values );