#!/usr/bin/perl

use lib 'lib';
use Iterator::Subsets::BySize;

my $N = shift or die "Usage: $0 Nsides\n";
die "N must be even\n" unless $N % 2 == 0;
my $L = $N/2 -2;
my $R = $N/2 +2;

my @c = ($R, (0) x ($L-2));

my $it = Iterator::Subsets::BySize::subsets_of_size_n([0..$N-1], $L);
my %canonical;
my %distinct;
while (my $ss = $it->()) {
  my @bits = ("R") x $N;
  $bits[$_] = "L" for @$ss;
  my @various;
  for my $i (0 .. $N-1) {
    push @various, join("", @bits), join("", reverse @bits);
    push @bits, shift @bits;
  }
  @various = sort {$b cmp $a} @various;
  for my $v (@various) { $canonical{$v} = $various[0] }
  $distinct{$various[0]}++;
}

printf "There are %d distinct polygons\n", scalar(keys %distinct);
exit if $ENV{STOP};
for my $d (sort keys %distinct) {
  print "  $d\n";
}

for my $k (sort keys %canonical) {
  print "$k => $canonical{$k}\n";
}



# ordered partitions of $a into $p parts exactly
sub partition {
  my ($a, $p) = @_;
  if ($a == 0) { return $p == 0 ? [] : () }
  return if $p < 0;
  my @partitions;
  for my $i (0.. $a) {
    for my $sub (partition($a-$i, $p-1)) {
      push @partitions, [ $i, @$sub ];
    }
  }
  return @partitions;
}

