Here's a Java program to show uniqueness.
public static void main(String[] args) {
boolean valid;
boolean[] b;
int k;
b = new boolean[5];
for (int i = 0; i < 32; i++) {
valid = true;
k = i;
for (int j = 0; j < 5; j++) {
b[j] = k % 2 == 0;
k /= 2;
}
if (b[0] ^ nConsecBool(b,false,2)) {
if (b[1] ^ numberFalse(b)>2) {
if (b[2] ^ nConsecBool(b,false,3)) {
if (b[3] ^ nConsecBool(b,true,2)) {
if (b[4] ^ numberFalse(b)!=3) {
print(b);
}
}
}
}
}
}
}
private static boolean nConsecBool(boolean[] b, boolean bool, int n) {
for (int i=0; i<b.length; i++) {
int k=0;
for (int j=i; j<b.length && j<i+n; j++) {
if (b[j]==bool) k++;
}
if (k>=n) return true;
}
return false;
}
private static int numberFalse(boolean[] b) {
int k=0;
for (int i=0; i<b.length; i++) {
if (!b[i]) k++;
}
return k;
}
private static void print(boolean[] b) {
char[] alpha = {'a','b','c','d','e'};
for (int i=0; i<b.length; i++) {
System.out.println(alpha[i]+":"+b[i]);
}
}