#include <bits/stdc++.h>
using namespace std;
int cnt[100005], d[100005];
char c[100005], first[100005];
bool vis[100005], can[100005];
vector<int> ans;
set<int> st;
bool test(int i, int m) {
  int k = d[i];
  set<int> s;
  while (i <= m) {
    if (c[i] == '+')
      s.insert(d[i]);
    else
      s.erase(s.find(d[i]));
    if (s.size() && s.find(k) == s.end()) return false;
    ++i;
  }
  return true;
}
int main() {
  int n, m, k;
  char s[10];
  cin >> n >> m;
  bool flag = false;
  for (int i = 1; i <= m; ++i) {
    scanf("%s%d", s, &k);
    if (s[0] == '+')
      ++cnt[k];
    else
      --cnt[k];
    vis[k] = true;
    c[i] = s[0];
    d[i] = k;
    if (cnt[k] < 0) flag = true, st.insert(k);
  }
  for (int i = 1; i <= n; ++i)
    if (!vis[i]) can[i] = true;
  for (int i = 1; i <= m; ++i) {
    if (c[i] == '+') {
      if (st.size() == 0) {
        memset(vis, 0, sizeof(vis));
        can[d[i]] = true;
        if (!test(i, m) || c[1] == '-' && d[1] != d[i]) can[d[i]] = false;
        break;
      }
      st.insert(d[i]);
      vis[d[i]] = false;
    } else {
      st.erase(st.find(d[i]));
      if (st.size() != 0) vis[d[i]] = false;
    }
  }
  for (int i = 1; i <= n; ++i)
    if (vis[i]) can[i] = true;
  for (int i = 1; i <= n; ++i)
    if (can[i]) ans.push_back(i);
  cout << ans.size() << endl;
  if (ans.size() != 0)
    for (int i = 0; i < ans.size(); ++i)
      printf("%d%c", ans[i], i + 1 == ans.size() ? '\n' : ' ');
  return 0;
}
