This documentation is automatically generated by online-judge-tools/verification-helper
#include "src/string/knuth-morris-pratt.hpp"#pragma once
#include <vector>
#include <string>
namespace luz {
  // vs[i] := how many characters match the
  //          prefix and suffix of s[0,i) ?
  // O(|s|)
  std::vector<int> kmp(const std::string &s){
    int n = s.size();
    std::vector<int> vs(n + 1,-1);
    for (int i = 0, j = -1; i < n; i++){
      while (j >= 0 and s[i] != s[j]) j = vs[j];
      vs[i + 1] = ++j;
    }
    return vs;
  }
}#line 2 "src/string/knuth-morris-pratt.hpp"
#include <vector>
#include <string>
namespace luz {
  // vs[i] := how many characters match the
  //          prefix and suffix of s[0,i) ?
  // O(|s|)
  std::vector<int> kmp(const std::string &s){
    int n = s.size();
    std::vector<int> vs(n + 1,-1);
    for (int i = 0, j = -1; i < n; i++){
      while (j >= 0 and s[i] != s[j]) j = vs[j];
      vs[i + 1] = ++j;
    }
    return vs;
  }
}