//DP solution by Luis #include #include #include using namespace std; #define maxm 1001 #define maxn 1001 long long p = 10567201LL; long long exp (long long a, long long k){ long long ret = 1LL; if (k == 0) return ret; ret = exp(a, k / 2); ret = (ret * ret) % p; if (k % 2 == 1) ret = (ret * a) % p; return ret; } long long inverso(int a){ return exp((long long)a, p - 2); } long long inv[maxm]; long long dos[maxn]; long long comb (int n, int m){ long long c = dos[n]; long long ret = 1LL; for (int i = 0; i < m; i++) ret = (ret * (c - i)) % p; for (int i = 1; i <= m; i++) ret = (ret * inv[i]) % p; return ret; } int main (){ clock_t start, finish; start = clock(); dos[0] = 1LL; for (int i = 1; i < maxn; i++) dos[i] = (dos[i - 1] * 2) % p; for (int i = 1; i < maxm; i++) inv[i] = inverso(i); int n, m, v; for (;;){ scanf("%d %d %d", &n, &m, &v); if (!n) break; long long f[maxm]; if (v) f[0] = 0LL; else f[0] = 1LL; f[1] = 1LL; for (int i = 2; i <= m; i++){ f[i] = (comb(n, i - 1) - (dos[n] - i + 2) * f[i - 2] + p * p) % p; f[i] = (f[i] * inv[i]) % p; } printf("%d\n", f[m]); } finish = clock(); cerr << (double)(finish -start) / CLOCKS_PER_SEC << endl; return 0; }