inline bool check(int m, std::string& a, std::string& b)
{
    std::set<Hash> s;

    Hash hash;
    for (int i = 0; i < m; ++i)
	hash.add(a[i]);
    s.insert(hash);

    for (unsigned i = m, len = a.size(); i < len; ++i) {
	hash.rem(a[i - m], m - 1);
	hash.add(a[i]);
	s.insert(hash);
    }

    hash = Hash();
    for (int i = 0; i < m; ++i) {
	hash.add(b[i]);
    }
    if (s.find(hash) != s.end()) {
	return true;
    }

    for (unsigned i = m, len = b.size(); i < len; ++i) {
	hash.rem(b[i - m], m - 1);
	hash.add(b[i]);
	if (s.find(hash) != s.end())
	    return true;
    }

    return false;
}