RT,只能输出 -1 -1
#include <iostream>
#include <cstdio>
#include <algorithm>
#define rint register int
#define endl '\n'
using std::cin;
using std::cout;
const int N = 1e5 + 5;
const int M = 1e6 + 5;
const int inf = 0x3f3f3f3f;
int idx, h[N], e[M], ne[M], w[M];
int d[N];
int maxx, minn;
int ans, res;
bool vis[N];
int n, m;
void add(int a, int b, int c)
{
e[++idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx;
}
void dfs(int x, int dist)
{
if (d[x])
{
ans = std::__gcd(ans, abs(d[x] - dist));
return;
}
d[x] = dist;
vis[x] = 1;
maxx = std::max(maxx, dist);
minn = std::min(minn, dist);
for (rint i = h[x]; i; i = ne[i])
{
int y = e[i];
dfs(y, x + w[i]);
}
}
int main()
{
cin >> n >> m;
for (rint i = 1; i <= m; i++)
{
int a, b;
cin >> a >> b;
add(a, b, 1);
add(b, a, -1);
}
for (rint i = 1; i <= n; i++)
{
if (vis[i])
{
continue;
}
maxx = -inf;
minn = inf;
dfs(i, 1);
res += maxx - minn + 1;
}
if (ans) // 找到环了
{
if (ans < 3)
{
cout << -1 << " " << -1 << endl;
return 0;
}
for (rint i = 3; i <= ans; i++)
{
if (ans % i == 0)
{
cout << ans << " " << i << endl;
return 0;
}
}
}
else // 没有环
{
if (res < 3)
{
cout << -1 << " " << -1 << endl;
return 0;
}
cout << 3 << " " << res << endl;
}
return 0;
}