#include <iostream>
#include <string>
#include <cstdint>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <memory>
using namespace std;
class PackageStream {
public:
PackageStream(std::string data, int32_t package_len): package_len_(package_len), data_(data) {}
int32_t PackageLen() const {
return package_len_;
}
int32_t ReadPackage(char* buf) {
int32_t next_pos = min<int32_t>(data_.size(), pos_ + PackageLen());
int32_t len = next_pos - pos_;
memcpy(buf, data_.c_str() + pos_, len);
pos_ = next_pos;
return len;
}
private:
const int32_t package_len_;
int32_t pos_ = 0;
std::string data_;
};
#include "buffered_reader.h"
int main() {
int32_t package_len = 0;
int32_t read_len = 0;
int32_t expect_len = 0;
int ok = true;
int cur_byte = 0;
cin >> package_len;
string s;
getline(cin, s);
getline(cin, s);
PackageStream stream(s, package_len);
BufferedReader reader(&stream);
while (cin >> read_len >> expect_len) {
std::unique_ptr<char[]> buf(new char[read_len]);
int got_len = reader.Read(buf.get(), read_len);
if (got_len != expect_len || memcmp(buf.get(), s.c_str() + cur_byte, expect_len) != 0) {
ok = false;
break;
}
cur_byte += read_len;
}
cout << (int)ok << endl;
}