#!/usr/bin/perl

#removes redundant mappings  coming from "rotations"
# of the cube.

%face = (
  1 => 2 , 2 => 3 , 3 => 4 , 4 => 5 , 5 => 6 , 6 => 7 , 7 => 8 , 8 => 1
);

%rotate = (
  1 => 1 , 2 => 3 , 3 => 4 , 4 => 6 , 5 => 5 , 6 => 7 , 7 => 8 , 8 => 2
);

%flip2 = (
  1 => 1 , 2 => 6 , 3 => 3 , 4 => 4 , 5 => 5 , 6 => 2 , 7 => 7 , 8 => 8
);

%flip3 = (
  1 => 1 , 2 => 2 , 3 => 7 , 4 => 4 , 5 => 5 , 6 => 6 , 7 => 3 , 8 => 8
);

%flip4 = (
  1 => 1 , 2 => 2 , 3 => 3 , 4 => 8 , 5 => 5 , 6 => 6 , 7 => 7 , 8 => 4
);

%flip5 = (
  1 => 1 , 2 => 2 , 3 => 4 , 4 => 3 , 5 => 5 , 6 => 6 , 7 => 8 , 8 => 7
);

sub remap {
  $_ = $_[0];
  %m = %{$_[1]};
  s/1/a/g; s/2/b/g; s/3/c/g; s/4/d/g;
  s/5/e/g; s/6/f/g; s/7/g/g; s/8/h/g;
  s/a/$m{1}/g; s/b/$m{2}/g;
  s/c/$m{3}/g; s/d/$m{4}/g;
  s/e/$m{5}/g; s/f/$m{6}/g;
  s/g/$m{7}/g; s/h/$m{8}/g;
  return($_);
} 

sub resort {
  $_ = $_[0];
  chomp;
  s/\;$//;
  @data = split(';',$_);
  foreach (@data) {
    $_ = join '', sort split '', $_;
  }
  return(join ';', (sort @data), "\n");
}

LINE: foreach (<>) {
  $original = $_;
#print "Original:$original";

  $facebase = $original;
  for (1..8) {
#print "New Face:$facebase";
    $rotbase = $facebase;     
    for (1..3) {
#print "New Rott:$rotbase";

      $flip = $rotbase; 
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip2));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip3));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip2));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip4));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip2));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip3));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip2));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip5));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip2));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip3));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip2));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip4));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip2));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip3));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip2));
      next LINE if (($original cmp $flip) > 0);
      $flip = &resort(&remap($flip,\%flip5));
      next LINE if (($original cmp $flip) > 0);

      $rotbase = &resort(&remap($rotbase,\%rotate));
    }
    $facebase = &resort(&remap($facebase,\%face));
  }


  print $original;
}
