#include <bits/stdc++.h>
int n, m;
struct T {
  char opt;
  int x;
} a[100005];
bool in[100005], hv[100005], out[100005];
bool ans[100005];
bool onl[100005];
int first[100005], next[100005], last[100005];
bool up[100005];
int main() {
  memset(ans, 1, sizeof(ans));
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; ++i) {
    scanf(" %c%d", &a[i].opt, &a[i].x);
    a[i].x--;
    up[a[i].x] = true;
  }
  bool hvin = false;
  int cto = 0;
  for (int i = 0; i < m; ++i) {
    if (a[i].opt == '-' && !hv[a[i].x]) {
      hvin = in[a[i].x] = true;
      ++cto;
    }
    hv[a[i].x] = true;
  }
  memset(hv, 0, sizeof(hv));
  for (int i = 0; i < m; ++i) {
    if ((i != 0 || hvin) && !in[a[i].x] && !hv[a[i].x]) ans[a[i].x] = false;
    hv[a[i].x] = true;
  }
  memcpy(onl, in, sizeof(in));
  for (int i = 0; i < m; ++i)
    if (a[i].opt == '+') {
      onl[a[i].x] = true;
      ++cto;
    } else {
      onl[a[i].x] = false;
      --cto;
      if (cto) ans[a[i].x] = false;
    }
  for (int i = 0; i < n; ++i)
    if (up[i] && !onl[i] && cto) ans[i] = false;
  memset(first, 0xff, sizeof(first));
  for (int i = 0; i < m; ++i) {
    if (first[a[i].x] == -1) {
      first[a[i].x] = i;
      next[i] = -1;
      last[a[i].x] = i;
    } else {
      next[last[a[i].x]] = i;
      last[a[i].x] = i;
      next[i] = -1;
    }
  }
  for (int i = 0; i < n; ++i) {
    if (first[i] == -1 || !ans[i]) continue;
    int j = first[i];
    bool online = !in[i];
    while (j != -1) {
      if (!online && (next[j] - j > 1 || (next[j] == -1 && m - j > 1))) {
        ans[i] = false;
        break;
      }
      j = next[j];
      online = !online;
    }
  }
  int ct = 0;
  for (int i = 0; i < n; ++i)
    if (ans[i]) ++ct;
  printf("%d\n", ct);
  for (int i = 0; i < n; ++i)
    if (ans[i]) printf("%d ", i + 1);
  return 0;
}
