using System; using System.Collections.Generic; using System.Linq; using System.IO; using System.Text; using static System.Math; using static System.Array; using static AtCoder.Tool; namespace AtCoder { class AC { const int MOD = 1000000007; const int INF = int.MaxValue / 2; const long SINF = long.MaxValue / 2; const double EPS = 1e-8; static readonly int[] dI = { 0, 1, 0, -1 }; static readonly int[] dJ = { 1, 0, -1, 0 }; //static List> G = new List>(); //static List>G = new List>(); //static List E = new List(); static void Main(string[] args) { //var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }; //Console.SetOut(sw); var cin = new Scanner(); var input = cin.ReadSplitLong(); var aa = input[0]; var bb = input[1]; var cc = input[2]; var D = bb * bb - 4 * aa * cc; var a = (decimal)aa; var b = (decimal)bb; var c = (decimal)cc; if (aa == 0) { if (bb != 0) { Console.WriteLine(1); Console.WriteLine(-c / b); return; } if (cc == 0) { Console.WriteLine(-1); return; } Console.WriteLine(0); return; } var X = -(b / (2 * a)); if (D == 0) { Console.WriteLine(1); Console.WriteLine(X);return; } if (D < 0) { Console.WriteLine(0);return; } var k = b * b - 4 * a * c; decimal l = 0; decimal r = (decimal)1e13; while (r - l > (decimal)1e-14) { decimal mid = (l + r) / 2; if (mid * mid > k) { r = mid; } else { l = mid; } } decimal Y = l / (2 * a); Console.WriteLine(2); var X1 = Min(X - Y, X + Y); var X2 = Max(X - Y, X + Y); Console.WriteLine($"{X1}\n{X2}"); //Console.Out.Flush(); } struct Edge { public int from; public int to; public long dist; public Edge(int t, long c) { from = -1; to = t; dist = c; } public Edge(int f, int t, long c) { from = f; to = t; dist = c; } } } public class Scanner { public int[] ReadSplitInt() { return ConvertAll(Console.ReadLine().Split(), int.Parse); } public long[] ReadSplitLong() { return ConvertAll(Console.ReadLine().Split(), long.Parse); } public double[] ReadSplit_Double() { return ConvertAll(Console.ReadLine().Split(), double.Parse); } } public static class Tool { static public void Initialize(ref T[] array, T initialvalue) { for (var i = 0; i < array.Length; i++) { array[i] = initialvalue; } } static public void Swap(ref T a, ref T b) { T keep = a; a = b; b = keep; } static public void Display(T[,] array2d, int n, int m) { for (var i = 0; i < n; i++) { for (var j = 0; j < m; j++) { Console.Write($"{array2d[i, j]} "); } Console.WriteLine(); } } static public long LPow(int a, int b) { return (long)Pow(a, b); } } }