#!/usr/bin/perl

open(F1, $ARGV[0]) || die;
open(F2, $ARGV[1]) || die;
$action = $ARGV[2];

while (<F1>) {
	next if (/^#/);
	my($Clust, @D, $id,$num,@data);
	chop;
	($id, $num, @data) = split(/\t/);
	foreach $d (@data) {
		push(@D, $d);
	}
	$Clust->{D} = join(' ', sort @D);
	$Clust->{L} = $_;
	$Clust->{I} = $id;
	push(@Clusters1, $Clust);
}
close(F1);
#print STDERR "1 OK\n";

while (<F2>) {
	next if (/^#/);
	my($Clust, @D, $id,$num,@data);
	chop;
	($id, $num, @data) = split(/\t/);
	foreach $d (@data) {
		push(@D, $d);
	}
	$Clust->{D} = join(' ', sort @D);
	$Clust->{L} = $_;
	$Clust->{I} = $id;
	push(@Clusters2, $Clust);
}
close(F2);
#print STDERR "2 OK\n";

@Clusters1 = sort {$a->{D} cmp $b->{D}} @Clusters1;
@Clusters2 = sort {$a->{D} cmp $b->{D}} @Clusters2;

$i = 0; $j = 0;

$ClustNum1 = @Clusters1;
$ClustNum2 = @Clusters2;

while ($i < $ClustNum1 && $j < $ClustNum2) {
#print "$Clusters1[$i]->{D} cmp $Clusters2[$j]->{D}\n";
	$cmp = ($Clusters1[$i]->{D} cmp $Clusters2[$j]->{D});
	if ($cmp == 0) {
		push(@Same, $Clusters1[$i]);
		$i++; $j++;
	} elsif ($cmp < 0) {
		push(@Only1, $Clusters1[$i]);
		$i++;
	} elsif ($cmp > 0) {
		push(@Only2, $Clusters2[$j]);
		$j++;
	} else {
		die "ERROR\n";
	}
}
while ($i < $ClustNum1) {
	push(@Only1, $Clusters1[$i]);
	$i++;
}
while ($j < $ClustNum2) {
	push(@Only2, $Clusters2[$j]);
	$j++;
}

if ($action eq 'asubb') {
	*OUT = *Only1;
} elsif ($action eq 'bsuba') {
	*OUT = *Only2;
} else {
	*OUT = *Same;
}

foreach $s (sort {$a->{I}<=>$b->{I}} @OUT) {
	print "$s->{L}\n";
#	print "$s->{I}\n";
}
