#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<time.h>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <stdio.h>
#include <deque>
#include <map>
#include <set>
#include <string>
#define ll long long 
typedef long long LL;
typedef unsigned long long ULL;
//typedef long double ld;
using namespace std;
const int MAXN = 2e6 + 5000;
const long double eps = (1e-12);
const int logn = 21;
const double Pi = acos(-1.0);
const LL pp = 1000000000 + 7;
int lowbit(int x) { return x & (-x); }
#define MP(i,j) make_pair(i,j)
#define M(x) ((((x)%pp)+pp)%pp)
#define int LL
#define P pair<int,int>
const int INF = 1e9;

int gcd(int a, int b) {
	if (b == 0) return a;
	else return gcd(b, a % b);
}

vector<int> ans;
int n;

bool check(int n) {
	ans.clear();
	int tmp = 1;
	for (int i = 1; i < n; i++) {
		if (gcd(i, n) == 1) {
			ans.push_back(i);
			tmp *= i;
			tmp %= n;
		}
	}
	if (tmp == 1) return true;
	for (auto a : ans) {
		if (a == tmp) return true;
	}
	return false;
}

signed main() {
	//int t = 1000;
	//while (t--) {
	//	if (check(t) == false) {
	//		cout << t << endl;
	//	}
	//}
	scanf("%lld", &n);

	int tmp = 1;
	for (int i = 1; i < n; i++) {
		if (gcd(n, i) == 1) {
			ans.push_back(i);
			tmp *= i;
			tmp %= n;
		}
	}

	int sz = ans.size();
	if (tmp == 1) {
		printf("%d\n", sz);
		for (auto a : ans) {
			printf("%d ", a);
		}
	}
	else {
		sz--;
		printf("%d\n", sz);
		for (auto a : ans) {
			if (a != tmp) {
				printf("%d ", a);
			}
		}
	}
	return 0;
}