#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const double eps = 1e-9;
const double INF = inf;
const double EPS = eps;
bool u[123123];
char Tp[123123];
vector<pair<char, int> > Ev[123123];
int Id[123123], P[(1 << 18) + 100], st, n, m;
bool g[123123];
bool get(int l, int r) {
  int ret = 0;
  l += (1 << 17), r += (1 << 17);
  while (l < r) {
    if (l & 1) ret = max(ret, P[l]), l++;
    if (r & 1) r--, ret = max(ret, P[r]);
    l >>= 1, r >>= 1;
  }
  return (ret > 0);
}
int main() {
  int i, j, res = 0;
  scanf("%d%d", &n, &m);
  for (i = 0; i < m; i++) {
    scanf(" %c%d", &Tp[i], &Id[i]), Id[i]--;
    if (u[Id[i]] == 0 && Tp[i] == '-') st++, u[Id[i]] = 1;
    u[Id[i]] = 1;
    Ev[Id[i]].push_back(make_pair(Tp[i], i));
  }
  for (P[(1 << 17)] = st, i = 0; i < m; i++) {
    (Tp[i] == '-') ? (st--) : (st++);
    assert(st >= 0);
    P[(1 << 17) + i + 1] = st;
  }
  for (i = (1 << 17) - 1; i > 0; i--) P[i] = max(P[2 * i], P[2 * i + 1]);
  for (i = 0; i < n; i++) {
    if (!Ev[i].size()) {
      res++;
      g[i] = 1;
      continue;
    }
    bool good = 1;
    if (Ev[i][0].first == '+' && get(0, Ev[i][0].second + 1)) good = 0;
    if (Ev[i].back().first == '-' && get(Ev[i].back().second + 1, m + 1))
      good = 0;
    for (j = 1; j < (int)Ev[i].size(); j++)
      if (Ev[i][j].first == '+' &&
          get(Ev[i][j - 1].second + 1, Ev[i][j].second + 1))
        good = 0;
    if (good) res++, g[i] = 1;
  }
  printf("%d\n", res);
  for (i = 0; i < n; i++)
    if (g[i]) printf("%d ", i + 1);
  printf("\n");
  ;
  return 0;
}
