diff --git a/PM.cpp b/PM.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8ab29a73a20989eb49b3e348ea6868a679758afb
--- /dev/null
+++ b/PM.cpp
@@ -0,0 +1,58 @@
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include <math.h>
+using namespace std;
+const unsigned int n = 0xFFFF;
+const unsigned int m = 16807;
+const unsigned int b = 0;
+static long  seed = 0xAAAA;
+long uniform() {
+   long unsigned int hi = m * (seed & n);
+   long unsigned int lo = m * (seed >> 16);
+
+   lo+= (hi & 0x7FFF) << 16;
+   lo+= hi >> 15;   
+   
+   if (lo > 0x7FFFFFFFF)
+      lo -= 0x7FFFFFFF;
+   seed=(long) lo;
+   return seed %10;
+}
+void store_res(long * res, int freqs[10], int size){
+	std::ofstream myfile, freqcsv;
+	myfile.open("gva_res.csv");
+	freqcsv.open("gva_freqs.csv");
+	int i;
+	for (i = 0; i < size; i ++){
+		freqs[res[i]] ++;
+		myfile << res[i];
+		myfile << "\n";
+	}
+	for (i=0; i < 10; i++){
+		freqcsv << "0.";
+		freqcsv << i;
+		freqcsv << ", ";
+		freqcsv << freqs[i];
+		freqcsv << "\n";
+	}
+	myfile.close();
+	freqcsv.close();
+}
+
+int main(int argc, char **argv) {
+   if(argc <2)
+	   return -1;
+   long unif[atoi(argv[1])];
+   // create the outputs
+   for (int i = 0; i < atoi(argv[1]); i++)
+      unif[i] = uniform();
+   
+   // store hist freqs
+   int freqs[10];
+   for(int i=0; i < 10; i ++)
+	   freqs[i] = 0;
+   store_res(unif, freqs, atoi(argv[1]));
+   for (int i = 0; i < atoi(argv[1]); i++)
+      cout << unif[i] << endl;
+}
diff --git a/gva_freqs_1000.odc b/gva_freqs_1000.odc
new file mode 100644
index 0000000000000000000000000000000000000000..c22348860e3431d963b315029d747805fac824e9
Binary files /dev/null and b/gva_freqs_1000.odc differ
diff --git a/gva_freqs_100000.odc b/gva_freqs_100000.odc
new file mode 100644
index 0000000000000000000000000000000000000000..9afb9a637b633867fd069b3732ac592286521317
Binary files /dev/null and b/gva_freqs_100000.odc differ