use long long instead of size_t make it more safe