#include <bits/stdc++.h>
using namespace std;
const int N = 10000;
const double eps = 1e-8, pi = acos(-1);
double Rad(double th) {
  if (th < -pi - eps) th += 2 * pi;
  if (th > pi + eps) th -= 2 * pi;
  return th;
}
struct vec {
  double x, y;
  vec(double X = 0, double Y = 0) {
    x = X;
    y = Y;
  }
  vec operator+(const vec &p) const { return vec(x + p.x, y + p.y); }
  vec operator-(const vec &p) const { return vec(x - p.x, y - p.y); }
  vec operator-() const { return vec(-x, -y); }
  double operator*(const vec &p) const { return x * p.x + y * p.y; }
  double operator%(const vec &p) const { return x * p.y - y * p.x; }
  double operator~() const { return x * x + y * y; }
  bool operator==(const vec &p) const {
    return fabs(x - p.x) <= eps && fabs(y - p.y) <= eps;
  }
  bool operator!=(const vec &p) const {
    return fabs(x - p.x) > eps || fabs(y - p.y) > eps;
  }
  vec Unit() {
    double t = sqrt(x * x + y * y);
    return vec(x / t, y / t);
  }
  vec Norm() { return vec(-y, x); }
  bool Quad() { return y > eps || fabs(y) <= eps && x >= -eps; }
};
vec operator*(const vec &a, const double &p) { return vec(a.x * p, a.y * p); }
vec operator*(const double &p, const vec &a) { return vec(a.x * p, a.y * p); }
vec operator/(const vec &a, const double &p) { return vec(a.x / p, a.y / p); }
bool Check_coll(vec a, vec b) { return fabs(a % b) <= eps; }
bool Check_left(vec a, vec b) { return b % a > eps; }
double Get_rad(vec a) { return atan2(a.y, a.x); }
double Get_rad(vec a, vec b) { return Rad(Get_rad(b) - Get_rad(a)); }
vec Get_rtt(vec a, double th) {
  double s = sin(th), c = cos(th);
  return vec(c * a.x - s * a.y, s * a.x + c * a.y);
}
int n, cq;
vec a[N + 9];
void into() {
  scanf("%d%d", &n, &cq);
  for (int i = 1; i <= n; ++i) scanf("%lf%lf", &a[i].x, &a[i].y);
}
vec ht;
void Get_heart() {
  double sum = 0;
  for (int i = 2; i < n; ++i) {
    double now = (a[i] - a[1]) % (a[i + 1] - a[1]);
    sum += now;
    ht = ht + now * (a[1] + a[i] + a[i + 1]) / 3;
  }
  ht = ht / sum;
  for (int i = 1; i <= n; ++i) a[i] = a[i] - ht;
}
void work() { Get_heart(); }
void getans() {
  int id[2] = {1, 2};
  double th = 0;
  for (; cq--;) {
    int opt, p;
    scanf("%d%d", &opt, &p);
    if (opt == 1) {
      if (p == id[1]) swap(id[0], id[1]);
      vec t = ht + Get_rtt(a[id[1]], th);
      double al = Rad(pi / 2 - Get_rad(t - ht));
      ht = t + Get_rtt(ht - t, al);
      th = Rad(th + al);
      scanf("%d", &id[0]);
    } else {
      vec t = ht + Get_rtt(a[p], th);
      printf("%.6lf %.6lf\n", t.x, t.y);
    }
  }
}
int main() {
  into();
  work();
  getans();
  return 0;
}
