#include <fstream>
#include <cstdio>
#include <vector>
#include <algorithm>

#define mp make_pair

using namespace std;

int main()
{
	ifstream cin("smith.in");
	ofstream cout("smith.out");
	int n;
	cin >> n;
	vector<int> a(n);
	for (int i = 0; i < n; i++)
		cin >> a[i];
	int neg = 0, zero = 0, pos = 0, cnt1 = 0, cntm1 = 0;
	for (int i = 0; i < n; i++)
	{
		if (a[i] > 0) pos++;
		if (a[i] == 0) zero++;
		if (a[i] < 0) neg++;
		if (a[i] == 1) cnt1++;
		if (a[i] == -1) cntm1++;
	}
	if (cnt1 + cntm1 == n && cntm1 % 2 == 0 || n == 2 && a[0] == a[1])
	{
		cout << "Impossible";
		return 0;
	} 
	vector<int> ans;
	if (neg % 2 == 1)
	{
		bool f = false;
		for (int i = 0; i < n; i++)
			if (a[i] >= 0 || f) ans.push_back(i + 1);
			else f = true;
	}
	else
	{
		if (zero > 0) 
		{
			if (n == zero)
			{
				cout << "Impossible";
				return 0;
			}
			for (int i = 0; i < n; i++)
			if (a[i] != 0) ans.push_back(i + 1);
		}
		else
		{
			vector<pair<int, int> > ne, po;
			for (int i = 0; i < n; i++)
				if (a[i] < 0) ne.push_back(mp(a[i], i));
				else po.push_back(mp(a[i], i));
			sort(ne.begin(), ne.end());
			sort(po.begin(), po.end());
			int bad1 = -1, bad2 = -1;
			if (ne.size() && !po.size()) bad1 = ne[0].second, bad2 = ne[1].second;
			if (po.size() && !ne.size()) bad1 = po[0].second, bad2 = po[1].second;
			if (ne.size() && po.size())
			{
				if (ne[0].first * ne[1].first > po[0].first * po[1].first) bad1 = po[0].second, bad2 = po[1].second;
				else bad1 = ne[0].second, bad2 = ne[1].second;
			}
			for (int i = 0; i < n; i++)
				if (i != bad1 && i != bad2) ans.push_back(i + 1);
		}
	}
	int answer =  ans.size();
	cout << answer << endl;
	for (int i = 0; i < answer; i++)
		cout << ans[i] << (i + 1 == answer ? "\n" : " ");
}

