#define x first #define y second #define y1 Y1 #define y2 Y2 #define mp make_pair #define pb push_back #define DEBUG(x) cout << #x << " = " << x << endl;
usingnamespacestd;
typedeflonglong LL; typedef pair <int, int> pii;
template <typename T> inlineintChkmax(T &a, T b){ return a < b ? a = b, 1 : 0; } template <typename T> inlineintChkmin(T &a, T b){ return a > b ? a = b, 1 : 0; } template <typename T> inline T read() { T sum = 0, fl = 1; char ch = getchar(); for (; !isdigit(ch); ch = getchar()) if (ch == '-') fl = -1; for (; isdigit(ch); ch = getchar()) sum = (sum << 3) + (sum << 1) + ch - '0'; return sum * fl; }
constint Mod = 9973; constint Maxn = 15;
int N, M, K;
namespace MATH { inlinevoidAdd(int &a, int b){ if ((a += b) >= Mod) a -= Mod; }
inlineintPow(int a, int b) { int ans = 1; for (int i = b; i; i >>= 1, a = (LL) a * a % Mod) if (i & 1) ans = (LL) ans * a % Mod; return ans; }
constint maxn = 1e5 + 100;
int prime[maxn], phi[maxn]; bool vis[maxn];
inlinevoidinit() { int n = 1e5; phi[1] = 1; for (int i = 2; i <= n; ++i) { if (!vis[i]) prime[++prime[0]] = i, phi[i] = i - 1; for (int j = 1; j <= prime[0] && (LL) i * prime[j] <= n; ++j) { vis[i * prime[j]] = 1; if (!(i % prime[j])) { phi[i * prime[j]] = phi[i] * prime[j]; break; } phi[i * prime[j]] = phi[i] * phi[prime[j]]; } } }
inlineintget_phi(int n) { if (n <= 1e5) return phi[n]; int ans = n; for (int i = 1; prime[i] * prime[i] <= n; ++i) if (!(n % prime[i])) { ans -= ans / prime[i]; while (!(n % prime[i])) n /= prime[i]; } if (n > 1) ans -= ans / n; return ans % Mod; } }
inline mat operator * (const mat &rhs) const { mat now; for (int i = 1; i <= M; ++i) for (int k = 1; k <= M; ++k) if (A[i][k]) for (int j = 1; j <= M; ++j) Add (now.A[i][j], A[i][k] * rhs.A[k][j] % Mod); return now; }
inline mat operator ^ (int b) { mat ans, a = *this; for (int i = 1; i <= M; ++i) ans.A[i][i] = 1; for (int i = b; i; i >>= 1, a = a * a) if (i & 1) ans = ans * a; return ans; }
inlinevoidinit() { for (int i = 1; i <= M; ++i) for (int j = 1; j <= M; ++j) A[i][j] = 1; }
inlinevoidprint() { for (int i = 1; i <= M; ++i, puts("")) for (int j = 1; j <= M; ++j) cout << A[i][j] << " "; } } trans;
int ans;
inlinevoidCalc(int x) { mat res = trans ^ x; int sum = 0; for (int i = 1; i <= M; ++i) Add (sum, res[i][i]); sum = (LL) sum * get_phi (N / x) % Mod; Add (ans, sum); }
inlinevoidSolve() { ans = 0; int m = sqrt (N); for (int i = 1; i <= m; ++i) if (!(N % i)) { Calc (i); if (i * i != N) Calc (N / i); } ans = (LL) ans * Pow (N, Mod - 2) % Mod; printf("%d\n", ans); }
inlinevoidInput() { N = read<int>(), M = read<int>(), K = read<int>(); trans.init (); for (int i = 1; i <= K; ++i) { int x = read<int>(), y = read<int>(); trans[x][y] = trans[y][x] = 0; } }