#include <bits/stdc++.h>
using namespace std;
struct node {
  int tim, opt, per;
} data[105000];
int ever[105000];
int exist[300000];
int ans[105000];
int n, m;
int cmp(struct node x, struct node y) {
  if (x.per < y.per) return 1;
  if (x.per > y.per) return 0;
  return (x.tim < y.tim);
}
void add(int x) {
  x += 131072;
  while (x) {
    exist[x] = 1;
    x >>= 1;
  }
}
int find(int l, int r) {
  l += 131072 - 1;
  r += 131072 + 1;
  while (l ^ r ^ 1) {
    if (l % 2 == 0)
      if (exist[l ^ 1]) return 1;
    if (r & 1)
      if (exist[r ^ 1]) return 1;
    l >>= 1;
    r >>= 1;
  }
  return 0;
}
int main() {
  int i, j;
  int now = 0;
  char e;
  scanf("%d%d", &n, &m);
  ans[0] = n;
  for (i = 1; i <= m; i++) {
    scanf(" %c%d", &e, &data[i].per);
    data[i].tim = i;
    if (e == '+')
      data[i].opt = 1;
    else
      data[i].opt = 2;
    if (!ever[data[i].per]) {
      ever[data[i].per] = 1;
      if (data[i].opt == 2) now++;
    }
  }
  if (now) add(0);
  for (i = 1; i <= m; i++) {
    if (data[i].opt == 1)
      now++;
    else
      now--;
    if (now) add(i);
  }
  sort(data + 1, data + m + 1, cmp);
  for (i = 1; i <= m; i++) {
    int ok = 1;
    now = data[i].per;
    if (data[i].opt == 1) {
      if (find(0, data[i].tim - 1)) ok = 0;
      i++;
    }
    while (i + 1 <= m && data[i + 1].per == now) {
      if (find(data[i].tim, data[i + 1].tim - 1)) ok = 0;
      i += 2;
    }
    if (data[i].per == now) {
      if (find(data[i].tim, m)) ok = 0;
    } else
      i--;
    if (!ok) {
      ans[now] = -1;
      ans[0]--;
    }
  }
  printf("%d\n", ans[0]);
  for (i = 1; i <= n; i++)
    if (!ans[i]) printf("%d ", i);
  if (ans[0]) printf("\n");
  return 0;
}
