#include <algorithm>
#include <cassert>
#include <cstdio>
#include <utility>
#include <vector>
#define REP(a, n) for (int a = 0; a < (n); ++a)
#define FOR(a, b, c) for (int a = (b); a <= (c); ++a)
#define FORD(a, b, c) for (int a = (b); a >= (c); --a)
typedef long long LL;
using namespace std;
template<class T> inline int vsize(const T &t) { return t.size(); }
/////////////////
int stos[32], wys, ile_st, ile_st_max;
LL wyn[33], potegi_w1[34] = {1};
vector<bool> przegr[2];
vector<bool> byl[2];
bool licz(int gracz, LL konf) {
    if (byl[gracz][konf])
        return przegr[gracz][konf];
    byl[gracz][konf] = 1;
    REP(s, ile_st) {
        int ww = konf/potegi_w1[s]%(wys+1);
        REP(w, ww)
            if ((gracz==0 && !(stos[s]&(1<<w))) || (gracz==1 && (stos[s]&(1<<w)))) {
                LL k2 =  konf/potegi_w1[s+1]*potegi_w1[s+1] + w*potegi_w1[s] + konf%potegi_w1[s];
                if (licz(!gracz, k2))
                    return przegr[gracz][konf] = 0;
            }
    }
    return przegr[gracz][konf] = 1;
}
void symuluj() {
    REP(a, 2) {
        przegr[a].resize(potegi_w1[ile_st]);
        byl[a].clear();
        byl[a].resize(potegi_w1[ile_st]);
        byl[a][0] = 1;
        przegr[a][0] = 1;
    }
    bool x = licz(0, potegi_w1[ile_st]-1);
    bool y = licz(1, potegi_w1[ile_st]-1);
    if (x && y) {
        wyn[ile_st]++;
//        fprintf(stderr, "%d %d %d (%d)\n", stos[0], stos[1], stos[2], ile_st);
        }
}
void probuj() {
    symuluj();
    if (ile_st < ile_st_max) {
        ++ile_st;
        for (stos[ile_st-1] = 0; stos[ile_st-1]<(1<<wys); stos[ile_st-1]++)
            probuj();
        --ile_st;
    }
}
int main() {
    scanf("%d%d%d", &ile_st_max, &wys, &ile_st);
    REP(a, ile_st) {
        char st[50];
        scanf("%s", st);
        REP(b, wys)
            if (st[b]=='C')
                stos[a] |= (1<<b);
        
    }
    FOR(a, 1, ile_st_max) potegi_w1[a] = potegi_w1[a-1]*(wys+1);
    potegi_w1[0] = 1;
    probuj();
    FOR(a, ile_st, ile_st_max)
        printf("%lld%c", wyn[a], a==ile_st_max ? '\n' : ' ');
}
        1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81  | #include <algorithm> #include <cassert> #include <cstdio> #include <utility> #include <vector> #define REP(a, n) for (int a = 0; a < (n); ++a) #define FOR(a, b, c) for (int a = (b); a <= (c); ++a) #define FORD(a, b, c) for (int a = (b); a >= (c); --a) typedef long long LL; using namespace std; template<class T> inline int vsize(const T &t) { return t.size(); } ///////////////// int stos[32], wys, ile_st, ile_st_max; LL wyn[33], potegi_w1[34] = {1}; vector<bool> przegr[2]; vector<bool> byl[2]; bool licz(int gracz, LL konf) { if (byl[gracz][konf]) return przegr[gracz][konf]; byl[gracz][konf] = 1; REP(s, ile_st) { int ww = konf/potegi_w1[s]%(wys+1); REP(w, ww) if ((gracz==0 && !(stos[s]&(1<<w))) || (gracz==1 && (stos[s]&(1<<w)))) { LL k2 = konf/potegi_w1[s+1]*potegi_w1[s+1] + w*potegi_w1[s] + konf%potegi_w1[s]; if (licz(!gracz, k2)) return przegr[gracz][konf] = 0; } } return przegr[gracz][konf] = 1; } void symuluj() { REP(a, 2) { przegr[a].resize(potegi_w1[ile_st]); byl[a].clear(); byl[a].resize(potegi_w1[ile_st]); byl[a][0] = 1; przegr[a][0] = 1; } bool x = licz(0, potegi_w1[ile_st]-1); bool y = licz(1, potegi_w1[ile_st]-1); if (x && y) { wyn[ile_st]++; // fprintf(stderr, "%d %d %d (%d)\n", stos[0], stos[1], stos[2], ile_st); } } void probuj() { symuluj(); if (ile_st < ile_st_max) { ++ile_st; for (stos[ile_st-1] = 0; stos[ile_st-1]<(1<<wys); stos[ile_st-1]++) probuj(); --ile_st; } } int main() { scanf("%d%d%d", &ile_st_max, &wys, &ile_st); REP(a, ile_st) { char st[50]; scanf("%s", st); REP(b, wys) if (st[b]=='C') stos[a] |= (1<<b); } FOR(a, 1, ile_st_max) potegi_w1[a] = potegi_w1[a-1]*(wys+1); potegi_w1[0] = 1; probuj(); FOR(a, ile_st, ile_st_max) printf("%lld%c", wyn[a], a==ile_st_max ? '\n' : ' '); }  | 
            
        
                    English