#include "hieroglyphs.h"
#include <vector>
using namespace std;
bool isSubseq(vector<int> A, vector<int> B) {
  int n = A.size(), m = B.size();
  int cur = 0;
  for (int i = 0; i < n; i++) {
    while(cur < m && A[i] != B[cur]) {
      cur++;
    }
    if (cur == m) {
      return false;
    }
    cur++;
  }
  return true;
}
int myCount(vector<int> C, int x) {
  int n = C.size();
  int res = 0;
  for (int i = 0; i < n; i++) {
    if (C[i] == x) {
      res++;
    }
  }
  return res;
}
vector<int> repeat(int n, int x) {
  vector<int> res;
  for (int i = 0; i < n; i++) {
    res.push_back(x);
  }
  return res;
}
vector<int> ucs(vector<int> A, vector<int> B) {
  int pref = 0;
  int n = A.size(), m = B.size();
  while(pref < min(n, m)) {
    if (A[pref] == B[pref]) {
      pref++;
    } else {
      break;
    }
  }
  int suf = 0;
  while(suf < min(n, m)) {
    if (A[n-(suf+1)] == B[m-(suf+1)]) {
      suf++;
    }
    else {
      break;
    }
  }
  vector<int> Ap, Bp;
  vector<int> prefix, suffix;
  for (int i = 0; i < pref; i++) {
    prefix.push_back(A[i]);
  }
  for (int i = pref; i < n-suf; i++) {
    Ap.push_back(A[i]);
  }
  for (int i = pref; i < m-suf; i++) {
    Bp.push_back(B[i]);
  }
  for (int i = n-suf; i < n; i++) {
    suffix.push_back(A[i]);
  }
  // for (int i = 0; i < (int) Ap.size(); i++) {
  //   printf(stderr, "%d ", Ap[i]);
  // }
  // printf("\n");
  // for (int i = 0; i < (int) Bp.size(); i++) {
  //   printf(stderr, "%d ", Bp[i]);
  // }
  vector<int> midAns;
  if (myCount(Ap, 0) == 0 || myCount(Bp, 0) == 0) {
    int a1 = myCount(Ap, 1);
    int b1 = myCount(Bp, 1);
    int x = min(a1, b1);
    midAns = repeat(x, 1);
  } else if (myCount(Ap, 1) == 0 || myCount(Bp, 1) == 0) {
    int a0 = myCount(Ap, 0);
    int b0 = myCount(Bp, 0);
    int x = min(a0, b0);
    midAns = repeat(x, 0);
  } else {
    if (Ap.size() > Bp.size()) {
      swap(Ap, Bp);
    }
    if (isSubseq(Ap, Bp)) {
      midAns = Ap;
    } else {
      vector<int> ans;
      ans.push_back(-1);
      return ans;
    }
  }
  vector<int> res = prefix;
  for (int i = 0; i < (int) midAns.size(); i++) {
    res.push_back(midAns[i]);
  }
  for (int i = 0; i < (int) suffix.size(); i++) {
    res.push_back(suffix[i]);
  }
  return res;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |