Задача
Вася недавно узнал, что такое циклическое k-расширение строки S. Его можно получить следующим образом: склеить k экземпляров строки S, а потом взять первые k символов результата.
Узнав это, Вася обрадовался, взял некоторую строку, и начал к ней применять описанную операцию, не запоминая, какое он каждый раз брал k.
Вам дана часть строки, получившейся у Васи. Ваша задача определить, не ошибся ли Вася в своих сложных преобразованиях, т. е., мог ли у него из первоначальной строки получиться ответ, содержащий данную строку в качестве подстроки.
Входные данные
В первой строке входного файла INPUT.TXT находится изначальная строка, которую Вася бережно записал перед тем, как приступить к своим действиям. Во второй строке находится подстрока результата, полученного Васей. Обе строки не пусты и по длине не превышают 5 000 символов. Строки могут состоять из больших и маленьких английских букв (с учетом регистра), а также цифр.
Выходные данные
В выходной файл OUTPUT.TXT выведите "NO", если можно точно сказать, что Вася ошибся, и "YES", если мог и не ошибиться.
Примеры	
1) Вход:
    abc
    abc	
    Выход:                   
    YES
2) Вход:
    abcd
    bcabc	
    Выход:         
    YES
3) Вход:
    abcabc
    abcA	
    Выход:
    NO
Идея
Я подумал, что задача заключается в том, чтобы проверить, есть ли в первой и второй строках одинаковые значения, но, видимо, неправильно.
#include <iostream>
#include <string>
int main()
{
    std::string str;
    std::string substring;
    std::cin >> str;
    std::cin >> substring;
    bool check = false;
    int i = 0;
    while (!check && i < substring.length())
    {
        if (str.find(substring[i]) == std::string::npos)
        {
            check = true;
        }
        i++;
    }
    if (check)
    {
        std::cout << "NO";
    }
    else
    {
        std::cout << "YES";
    }
}