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
#include <cstdio>
typedef long long LL;
const LL prime = 1e9+7;
const LL prime2 = 1500450271;
const LL b = 124477;
const LL b2 = 1291;

const int chunk_size = 1024;
char tb[chunk_size+1];

int main() {
	LL hash1 = 0, hash12 = 0;
	LL hash2 = 0, hash22 = 0;
	LL pt = b, pt2 = b2;
	int n;
    int read = 0;
    while(1) {
        read = fread(tb, sizeof(char), chunk_size, stdin);
        for(int i = 0; i < read; ++i) {
            if(tb[i] < 'a' || tb[i] > 'z') continue;
            hash1 += tb[i];
            hash1 %= prime;
            hash1 *= b;
            hash1 %= prime;
            hash2 += (pt*tb[i])%prime;
            hash2 %= prime;
            pt = (pt*b)%prime;

            hash12 += tb[i];
            hash12 %= prime2;
            hash12 *= b2;
            hash12 %= prime2;
            hash22 += (pt2*tb[i])%prime2;
            hash22 %= prime2;
            pt2 = (pt2*b2)%prime2;
        }
        if(read < chunk_size) break;
    }
	printf(hash1 == hash2 && hash12 == hash22 ? "TAK\n" : "NIE\n");
}