#include <bits/stdc++.h>
using namespace std;
int n, q;
const long double PI = acos(-1.0);
const int maxm = 1e4 + 10;
long double distance_to_o[maxm];
long double distance_to_1[maxm];
long double angle[maxm];
struct Point {
  long double x, y;
  Point(long double _x = 0.0, long double _y = 0.0) {
    x = _x;
    y = _y;
  }
  Point operator+(const Point& a) const { return Point(x + a.x, y + a.y); }
  Point operator-(const Point& a) const { return Point(x - a.x, y - a.y); }
  Point operator*(const long double& a) const { return Point(x * a, y * a); }
  Point operator/(const long double& a) const { return Point(x / a, y / a); }
  long double operator*(const Point& a) const { return x * a.y - y * a.x; }
} p[maxm], o;
long double cross(Point a, Point b, Point c) { return (b - a) * (c - a); }
Point barycenter_now(int cnt) {
  long double sum = 0;
  Point ret;
  for (int i = 3; i <= cnt; i++) {
    long double area = cross(p[1], p[i - 1], p[i]);
    sum += area;
    ret = ret + (p[1] + p[i - 1] + p[i]) / 3.0 * area;
  }
  return ret / sum;
}
int now1, now2;
Point get_pos(int ind) {
  long double angle1 = atan2(p[1].y - o.y, p[1].x - o.x);
  angle1 -= angle[ind];
  if (angle1 < 0) angle1 += 2 * PI;
  return o + Point(distance_to_o[ind] * cos(angle1),
                   distance_to_o[ind] * sin(angle1));
}
void ans() {
  int ind;
  scanf("%d", &ind);
  Point ans = get_pos(ind);
  printf("%.14f %.14f\n", (double)ans.x, (double)ans.y);
}
void rote(int ind) {
  Point p2 = get_pos(ind);
  long double th01 = atan2(o.y - p2.y, o.x - p2.x);
  long double th02 = 3 * PI / 2;
  long double th0 = th02 - th01;
  if (th0 < 0) th0 += 2 * PI;
  long double th11 = atan2(p[1].y - p2.y, p[1].x - p2.x);
  long double th12 = th11 + th0;
  if (2 * PI <= th12) th12 -= 2 * PI;
  o = Point(p2.x, p2.y - distance_to_o[ind]);
  p[1] = p2 +
         Point(distance_to_1[ind] * cos(th12), distance_to_1[ind] * sin(th12));
}
void update() {
  int del, add;
  scanf("%d%d", &del, &add);
  if (del == now1) {
    rote(now2);
    now1 = add;
  } else {
    rote(now1);
    now2 = add;
  }
}
long double dis(Point& a, Point& b) {
  Point c = a - b;
  return sqrt(c.x * c.x + c.y * c.y);
}
void init() {
  long double angle1 = atan2(p[1].y - o.y, p[1].x - o.x);
  for (int i = 1; i <= n; i++) {
    long double angle2 = angle1 - atan2(p[i].y - o.y, p[i].x - o.x);
    angle[i] = angle2 < 0 ? angle2 + 2 * PI : angle2;
    distance_to_1[i] = dis(p[i], p[1]);
    distance_to_o[i] = dis(p[i], o);
  }
}
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 1; i <= n; i++) {
    double a, b;
    scanf("%lf%lf", &a, &b);
    p[i].x = a;
    p[i].y = b;
  }
  o = barycenter_now(n);
  init();
  now1 = 1, now2 = 2;
  while (q--) {
    int op;
    scanf("%d", &op);
    if (op == 1) {
      update();
    } else {
      ans();
    }
  }
  return 0;
}
